.NET 4.x Запустить таймер в отдельном потоке - C#
Формулировка задачи:
Добрый день! Пожалуйста, подскажите, почему данный код не работает? Запустив метод CreateTimer(n) я хочу создать отдельный поток, в котором будет тикать таймер и через каждые n секунд удаляет из указанной папки файлы.
Как запустить таймер в отдельном потоке на WCF?
public void CreateTimer(int seconds)
{
Task.Factory.StartNew(() =>
{
DispatcherTimer t = new DispatcherTimer();
t.Tick += dispatcherTimer_Tick;
t.Interval = TimeSpan.FromSeconds(seconds);
t.Start();
});
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
DelFile();
}
private void DelFile()
{
FileInfo f;
var files = Directory.GetFiles(@"C:\123", "*.bmp", SearchOption.TopDirectoryOnly);
Parallel.For(0, files.Count(), (i) =>
{
f = new FileInfo(files[i]);
f.Delete();
});
}
Проблему решил поменяв класс DispatcherTimer на System.Timers.Timer:
System.Timers.Timer t = new System.Timers.Timer();
t.Elapsed += dispatcherTimer_Tick;
t.Interval = Seconds;
t.Start();Решение задачи: «.NET 4.x Запустить таймер в отдельном потоке»
textual
Листинг программы
System.Timers.Timer deleteFilesTimer;
public void CreateTimer(int seconds)
{
if (deleteFilesTimer == null)
{
deleteFilesTimer = new System.Timers.Timer();
deleteFilesTimer.AutoReset = false; // Чтобы операции удаления не перекрывались
deleteFilesTimer.Interval = seconds * 1000;
deleteFilesTimer.Elapsed += OnDeleteFilesTimerElapsed;
deleteFilesTimer.Enabled = true;
deleteFilesTimer.Start();
}
}
private void OnDeleteFilesTimerElapsed(object source, System.Timers.ElapsedEventArgs e)
{
try
{
foreach (string fileName in Directory.EnumerateFiles(@"C:\123", "*.bmp"))
{
try { File.Delete(fileName); }
catch () { }
}
}
finally
{
deleteFilesTimer.Enabled = true;
}
}