Не удается остановить закрытие формы, когда выполняется фоновый работник - PullRequest
1 голос
/ 12 апреля 2011

У меня есть форма с фоновым рабочим в приложении c # winforms (Visual Studio 2010, .net 4). Когда фоновый рабочий занят, я хотел бы предупредить пользователя о нем, когда он пытается закрыть форму и отменить закрытие формы. Я хотел бы обработать это в событии закрытия формы, установив отмену закрытия формы в true.

НО это все еще закрывает форму!

Вот фрагмент кода, который я использую:

private void FormDrivenDistance_FormClosing(object sender, FormClosingEventArgs e)
{
  if (myBackgroundWorker.IsBusy)
  {
     Messenger.ShowCriticalMessage("Don't close, in progress!");
                    e.Cancel = true;
  }
} 

Где ошибка?!

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

Вы уверены, что myBackgroundWorker.IsBusy возвращает true? Вы пытались установить точку останова внутри чека, чтобы убедиться, что он вызывается?

Вы уверены, что событие правильно подключено?

Если все это так, ошибка должна быть в другой части кода.

Там также может быть какой-то другой обработчик на FormClosing, устанавливающий Cancel в false, но это, вероятно, менее вероятный сценарий.

0 голосов
/ 12 апреля 2011

Что если вы переместите e.Cancel перед вашим сообщением?

Обратите внимание, что если вы пытаетесь предотвратить состояние гонки и остановить исключение InvalidOperationException, вызванное закрытием формы до завершения рабочего процесса, это не на 100%;Вы можете закрыть его в промежутке между самим завершением (InProgress теперь false) и обратным вызовом (OnWorkerCompleted).Вы все еще должны обработать исключение в любом случае.

Так как вы должны справиться с этим в любом случае, вы можете просто позволить пользователю закрыть форму.Пользователю неудобно ждать, пока что-то завершится, и им все равно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...