我有一個問題的一點點帶有取消我的背景工人在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