c#BackgroundWorkerコンポーネントの紹介(プロパティ、メソッド、イベント)

c#BackgroundWorkerコンポーネントの紹介(プロパティ、メソッド、イベント)

VS2005にBackgroundWorkerコンポーネントを追加しました。このコンポーネントはマルチスレッドプログラミングでの使用に非常に便利です。ただし、最初は、その使用メカニズムが理解されていなかったため、多くの回り道が必要でした。現在、このコンポーネントを使用する過程で使用しています。あなたとあなたの経験を共有してください。
    BackgroundWorkerクラスは、主にこの属性、メソッド、およびイベントのリストを使用します。
    重要な属性:
    1. CancellationPendingは、アプリケーションがバックグラウンド操作のキャンセルを要求したかどうかを示す値を取得します。DoWorkイベントのCancellationPending属性を判断することで、バックグラウンド操作をキャンセルする(つまり、スレッドを終了する)必要があるかどうかを判断できます
    。2. IsBusyは、BackgroundWorkerが非同期操作を実行しているかどうかを示す値を取得します。IsBusy属性は、バックグラウンド操作が使用されているかどうかを判別するためにプログラムで使用され
    ます。3。WorkerReportsProgressは、BackgroundWorkerが進捗更新を報告できるかどうかを示す値を
    取得または設定します。4。WorkerSupportsCancellationは、BackgroundWorkerが非同期キャンセルをサポートするかどうかを示す値を取得または設定します。WorkerSupportsCancellationをtrueに設定して、プログラムがCancelAsyncメソッドを呼び出し、中断されたバックグラウンド操作を終了する要求を送信できるようにします。
    重要なメソッド:
    1.中断されたバックグラウンド操作をキャンセルするCancelAsync要求
    2. RunWorkerAsyncは、非同期で実行される操作を開始するリクエストを送信します。このリクエストが発行されると、DoWorkイベントが発生し、バックグラウンド操作の実行が開始されます。
    3. ReportProgress
    はProgressChangedイベントの   重要なイベントを
    発生させます1     . DoWork
    がRunWorkerAsyncを呼び出したときに発生します2. ProgressChangedがReportProgressを呼び出した ときに発生します
3. RunWorkerCompleted。バックグラウンド操作が完了、キャンセル、または例外をスローしたときに発生します
    他に3つの重要なパラメーターがあります:RunWorkerCompletedEventArgsとDoWorkEventArgs 、ProgressChangedEventArgs。
    BackgroundWorkerの呼び出しメカニズムと属性、メソッド、およびイベントのシーケンス:

    上の図から、ライフサイクル全体で3つの重要なパラメーター転送プロセスが発生し
    たことがわかりますパラメーター転送1:パラメーター転送は、RunWorkerAsync(オブジェクト)の使用です。オブジェクトは、DoWorkイベントのDoWorkEventArgs.Argumentに渡されます。ここで渡すことができるパラメーターは1つだけなので、実際のアプリケーションでは、クラスがカプセル化され、インスタンス化されたクラス全体がRunWorkerAsyncオブジェクトとしてDoWorkEventArgs.Argumentに渡されます。
    パラメータ転送2:プログラムの進行状況をProgressChangedイベントに転送します。実際の使用では、メソッドとイベントの進行状況バーまたはログ情報を更新するためによく使用されます;
    パラメータ転送3:DoWorkイベントの終了前に、バックグラウンドスレッドによって生成された結果データが割り当てられますDoWorkEventArgs.Result側に、RunWorkerCompletedイベントのRunWorkerCompletedEventArgs.Resultプロパティを呼び出して、バックグラウンドスレッドによって生成された結果を取得します。
    さらに、上の図から、DoWorkイベントがバックグラウンドスレッドで実行されているため、このイベントでユーザーインターフェイスのコンテンツを操作できないことがわかります。ユーザーインターフェイスを更新する必要がある場合は、ProgressChangedイベントとRunWorkCompletedイベントを使用できます。

    BagkgroundWorkerのイベント呼び出しシーケンスとパラメーター受け渡しメカニズムを理解した後、このコンポーネントをマルチスレッドプログラミングに使用すると、はるかに簡単になります。

元の記事を28件公開 15のような 110,000以上の訪問

おすすめ

転載: blog.csdn.net/z3h0a5n8g8x9i9a2o3/article/details/9015481