2009-04-30 10 views
1

私は初めてBackgroundWorkerを使用していますが、使用方法が完全ではありません。 DoWorkハンドラから直接イベントを送信することはできますか、代わりにReportEventsを呼び出してProgressChangedハンドラからイベントを送信する必要がありますか?それはイベントを発生し、DoWork内からUIで動作することは技術的には可能だがBackgroundWorkerのDoWorkハンドラから直接イベントを起動できますか?

答えて

1

、あなたは他のスレッドの中から(UIの相互作用、または適切なスレッド同期のためのためにInvoke()またはBeginInvoke()を使用してこれだけあなたと同じようにしなければならないでしょう他のクロススレッド操作)、これはBackgroundWorkerの目的を無効にします。

ReportProgress()を呼び出すと、スレッドセーフな方法でProgressChangedイベントが発生します。あなたは完全なパーセンテージを表すintを渡します(実際に何かをすることはあなた次第です)。オプションで、イベントまたは進行状況に関する特定の情報を得るために必要なobjectも渡します。 ProgressChangedから、UIと対話したり、イベントを発生させることができます。

+0

原則として、他のスレッドからUIスレッドに話すべきではありません。あなたはデバッグするのが非常に難しい副作用を受けるでしょう。ただしないでください。 Adamが言ったように、ReportProgressを呼び出すほうがよいでしょう。 – Tony

-1

これをコードに追加するだけです。

void new control.CheckForIllegelCrossPathThreads == false; 
関連する問題