我有一个问题的一点点带有取消我的背景工人在Application_Deactivated事件在Windows Phone 7上application_deactivated事件取消BackgroundWorker的WP7
我的后台工作与网络服务同步,但我可以我猜猜它要走多久了,我只想取消工人。与此问题是,事件处理程序完成后,应用程序将只会杀死所有线程,所以我不能正确取消它。
我想什么做的是这样的:
Application_Deactivated
{
Backgroundworker.RunWorkerCompleted += bw_completed;
Backgroundworker.Cancel async
// wait till completed event which confirm the background thread has been cancelled
}
我第一次尝试使用在事件处理程序的AutoResetEvent,但是这不会工作造成App.xaml.cs线程是主应用程序的线程和在此线程中等待的线程将阻塞整个应用程序。
的cancelAsync之后被称为事件处理程序,该应用程序就会转到休眠和恢复,被称作实际的后台工作会给出错误大约一个空引用到Web响应网络处理程序时。
我已经在后台工作中检查取消挂起,并且取消功能已经通过取消按钮进行了测试,所以这不是问题。它纯粹是我需要等到后台工作人员退出正常。
我发现本网站上像这样的一些成果: How close BackgroundWorker thread when application is deactivated?
但是,只给了一个解决方案与ThreadAbortException,但我宁可不使用这一个。
如果您需要更多的代码,我可以提供。
你想创建一个超时功能吗? – 2012-01-18 14:10:25
不,我试图等待应用程序进入休眠状态,直到我的后台线程被取消了隐藏或错误。我有10秒钟等待,但我无法找到一种方法来声明这一次,而不让整个应用程序挂起。 – arjanhgroen 2012-01-18 14:16:16
[应用程序停用时如何关闭BackgroundWorker线程?](http://stackoverflow.com/questions/7620098/how-close-backgroundworker-thread-when-application-is-deactivated)。这个问题的答案提到你可以在你的工作线程中响应'CancellationPending' - 只有在你不这样做的时候''ThreadAbortException''才会被抛出。 – 2012-01-19 07:39:14