Как закрыть модальное окно после завершения задачи? ⇐ C#
Как закрыть модальное окно после завершения задачи?
У меня есть два окна по умолчанию. Я хочу, чтобы одно окно начало работу, другое окно показало в модальном (диалоговом) виде (с указанием прогресса, но сейчас это не важно), затем закрыло его после окончания этой работы. У меня есть следующие проблемы в моей реализации:
1) после завершения работы (появляется окно сообщения «Завершено!», но это также не важно и является просто индикацией), ProgressWindow не закрывается автоматически;
2) если я закрою его, щелкнув вручную красный крестик, возникнет исключение System.InvalidOperationException с сообщением «Вызывающий поток не может получить доступ к этому объекту, поскольку им владеет другой поток». происходит в строке
ожидание задачи; 3) код в ContinueWith на самом деле выполняется ДО завершения метода Go — почему?
Как мне добиться такого поведения?
Моя реализация:
пространство имен WpfApp1 { общедоступный частичный класс MainWindow: Окно { общедоступное главное окно() { ИнициализироватьКомпонент(); } асинхронный void Window_MouseLeftButtonDown (отправитель объекта, MouseButtonEventArgs e) { Окно w = новое ProgressWindow(); вар задача = Задача .Run(() => Перейти()) .ContinueWith(completedTask => w.Close()); w.ShowDialog(); дождаться задания; // Выдает исключение InvalidOperationException } асинхронная защита void Go() { ждать Task.Delay(500); // имитируем некоторую работу MessageBox.Show("Завершено!"); // указываем, что работа завершена } } }
У меня есть два окна по умолчанию. Я хочу, чтобы одно окно начало работу, другое окно показало в модальном (диалоговом) виде (с указанием прогресса, но сейчас это не важно), затем закрыло его после окончания этой работы. У меня есть следующие проблемы в моей реализации:
1) после завершения работы (появляется окно сообщения «Завершено!», но это также не важно и является просто индикацией), ProgressWindow не закрывается автоматически;
2) если я закрою его, щелкнув вручную красный крестик, возникнет исключение System.InvalidOperationException с сообщением «Вызывающий поток не может получить доступ к этому объекту, поскольку им владеет другой поток». происходит в строке
ожидание задачи; 3) код в ContinueWith на самом деле выполняется ДО завершения метода Go — почему?
Как мне добиться такого поведения?
Моя реализация:
пространство имен WpfApp1 { общедоступный частичный класс MainWindow: Окно { общедоступное главное окно() { ИнициализироватьКомпонент(); } асинхронный void Window_MouseLeftButtonDown (отправитель объекта, MouseButtonEventArgs e) { Окно w = новое ProgressWindow(); вар задача = Задача .Run(() => Перейти()) .ContinueWith(completedTask => w.Close()); w.ShowDialog(); дождаться задания; // Выдает исключение InvalidOperationException } асинхронная защита void Go() { ждать Task.Delay(500); // имитируем некоторую работу MessageBox.Show("Завершено!"); // указываем, что работа завершена } } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение