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