.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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д