Я попробовал то, что увидел в этом посте , который не ответил на мой вопрос. См. Мой код и дальнейшие объяснения ниже.
// In MyForm : Form
private void SetupForImportantTask()
{
// Does a ton of stuff to set up for ImportantTask, then...
this.Close();
}
private void MyForm_FormClosed(object sender, FormClosedEventArgs e)
{
// otherForm is an instance of OtherForm : Form
otherForm.ImportantTask(variousData);
}
// In OtherForm class...
public void ImportantTask(object variousData) {
// Does a bunch of stuff that takes a long time
// Provides UI feedback to notify the user a process in under way
}
Объяснение: Как вы можете видеть в коде, идея состоит в том, чтобы выполнить кучу настроек для ImportantTask
в MyForm
, затем перезвоните в OtherForm
с установочной информацией после того, как MyForm
уже закрылся .
То, что я вижу вместо этого:
Несмотря на то, что я не вызываю ImportantTask
до тех пор, пока событие Closed
на MyForm
не вызовет уже запущенного , то есть семантически означает, что форма уже закрыта, MyForm
остается открытой, пока поток пользовательского интерфейса зависает,пока ImportantTask
не будет завершено. Уведомление пользовательского интерфейса о длительном процессе никогда не отображается, и MyForm
закрывается только после завершения ImportantTask
.
Если MyForm
не закрывается при возникновении события Closed
, как еще можноЯ определяю, что Форма действительно закрыта и удалена с экрана?
Или:
Что за глупости я пропустил?