Как закрыть модальное окно после завершения задачи?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как закрыть модальное окно после завершения задачи?

Сообщение Anonymous »


У меня есть два окна по умолчанию. Я хочу, чтобы одно окно начало работу, другое окно показало в модальном (диалоговом) виде (с указанием прогресса, но сейчас это не важно), затем закрыло его после окончания этой работы. У меня есть следующие проблемы в моей реализации:

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("Завершено!"); // указываем, что работа завершена } } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»