В моем приложении у меня есть главное окно, и в него я загружаю страницу. Эта страница выполняет долгое время, когда пользователь нажимает кнопку. Моя проблема в том, что, когда выполняется длинная задача, и пользователь нажимает кнопку закрытия главного окна, приложение, похоже, не завершает работу, потому что я отлаживаю его в VS2008 и вижу, что кнопка остановки подсвечена. Если я хочу закончить, я должен нажать кнопку «Стоп», приложение не останавливает отладку автоматически при выходе из приложения. Я думал, что .NET автоматически останавливает фоновых рабочих при выходе из приложения, но я не уверен, увидев это поведение. Я пытался заставить и отменить фонового работника на странице незагруженных событий примерно так:
private void Page_Unloaded(object sender, RoutedEventArgs e)
{
// Is the Background Worker do some work?
if (My_BgWorker != null && My_BgWorker.IsBusy)
{
//If it supports cancellation, Cancel It
if (My_BgWorker.WorkerSupportsCancellation)
{
// Tell the Background Worker to stop working.
My_BgWorker.CancelAsync();
}
}
}
но безуспешно. После выполнения функции CancelAsync () через несколько минут я вижу, как фоновый работник завершает работу, и вызывает RunWorkerCompleted, и я вижу, что задача завершена, проверяя аргумент e.Cancelled в событии, но после этого события приложение продолжает работу без выхода, и понятия не имею, что делает ....
Я установил для WorkerSupportsCancellation значение true, чтобы поддержать отмену в начале.
Я бы оценил все ответы. Спасибо.