gpt4 book ai didi

wpf 在应用程序退出时取消后台工作

转载 作者:行者123 更新时间:2023-12-04 06:56:17 24 4
gpt4 key购买 nike

在我的应用程序中,我有一个主窗口,并在其中加载一个页面。当用户按下按钮时,此页面会执行长时间的任务。我的问题是,当长时间的任务正在执行并且用户按下主窗口的关闭按钮时,应用程序似乎没有完成,因为我正在 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 以支持取消。

我会感谢所有的答案。谢谢。

最佳答案

取消不是自动的,您在 DoWork 中的代码事件处理程序需要通过检查 CancellationPending 的值来处理取消。属性(property)。调用 CancelAsync不会中止线程,它只是设置 CancellationPending对...

例如 :

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
while(!bgw.CancellationPending)
{
...
}
}

关于wpf 在应用程序退出时取消后台工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2523378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com