在我的应用程序中,我有一个主窗口,并在其中加载一个页面。当用户按下按钮时,此页面会执行很长时间的任务。我的问题是,当正在执行长任务并且用户按下主窗口的关闭按钮时,应用程序似乎没有完成,因为我正在 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() 后,几分钟后,我可以看到 backgroundworker 完成并引发 RunWorkerCompleted 并且我可以看到任务已完成检查事件中的 e.Cancelled 参数,但是在执行此事件后,应用程序继续而不退出,我有不知道在做什么......
我将 WorkerSupportsCancellation 设置为 true 以在开始时支持取消。
我会感谢所有答案。谢谢。