2011-08-18 148 views
1

在我的主線程中運行Backgroundworker。他的待辦事項是從主線程調用「方法」的方法。當我希望取消我的後臺工作器時,它會停止運行,但在mainthread上調用的「方法」仍會運行導致問題的原因。任何想法如何解決它?C#線程和backgroundworker問題

+10

發佈一些代碼,證明您有問題。 –

+1

請您提供一些示例代碼或擴展說明嗎? –

+0

你能爲我們展示一些代碼嗎? – Zenwalker

回答

1

除了檢查CancellationPending,你需要設置的參數DoWorkEventArgsCancel財產。

然後,在RunWorkerCompleted事件,您可以查詢RunWorkerCompletedEventArgsCancelled屬性,將反映您在DoWorkEventArgs設置的值。

現在您可能會問,爲什麼BackgroundWorker在外部取消操作時不會自行設置這些屬性。原因是它不知道你的DoWorkEventArgs是否真的檢查過它是否被取消。 DoWorkEventArgs可能錯過了它併成功完成。這很重要,因爲它可能會導致副作用(如數據庫更新),您可能需要知道它是否實際完成。