Недавно я реорганизовал свой код WPF, и теперь мой DispatcherTimer перестал срабатывать. Я проверил другие подобные сообщения здесь, но все они казались проблемами с неправильным набором потока диспетчера, который я пробовал...
Мой код выглядит так:
class MainWindow : Window
{
private async void GoButton_Click(object sender, RoutedEventArgs e)
{
Hide();
m_files = new CopyFilesWindow();
m_files.Show();
m_dispatcherTimer = new DispatcherTimer();
m_dispatcherTimer.Tick += dispatcherTimer_Tick;
m_dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 250);
m_dispatcherTimer.Start();
await SomeLongRunningTask();
m_files.Hide();
Show();
}
(Текущий класс — это мой основной объект Window, который я скрываю на время копирования файла. CopyFilesWindow — это простое окно Xaml, содержащее элементы управления, которые я изменяю... CopyFilesWindow сам по себе абсолютно ничего не делает.)
По сути, я ожидаю длительной задачи (копирования большого количества файлов), и мой DispatcherTimer должен обновлять ход выполнения в dispatcherTimer_Tick. Однако я установил точку останова для этой функции, и она не сработала.
Я также попытался установить Dispatcher с помощью конструктора следующим образом:
m_dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal, m_files.Dispatcher);
m_dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal, this.Dispatcher);
Но ни одна из этих вещей не меняет поведение... он по-прежнему не срабатывает.
Что я здесь делаю неправильно?