C〓〓はバックグラウンドで動作します。例を共有します。


私達のプログラムの中で、いつもいくつか時間の長い演算があって、ユーザーの体験を保証するため、インターフェースが応答しないようにします。私達は普通マルチスレッドを使って、時間をつぶして、バックグランドで操作して、完成したら処理したり、ヒントを与えたりします。運行中でも、時々インターフェースのプログレスバーなどを更新します。必要に応じて、バックグラウンドスレッドを制御して、現在の操作を中断します。
以前は、似たような応用が面倒で、必要なコードが多くて、異常が発生しやすいです。ネットでは、この問題を解決するためのコンポーネントBackgroundWorkerを提供しています。BackgroundWorkカー類は、単独の専用スレッド上での動作を許可します。時間がかかる操作(ダウンロードやデータベース事務など)は、長時間実行されると、ユーザインターフェース(UI)が応答停止状態になる可能性がある。応答できるユーザーインターフェースが必要で、これらの操作に関連する長時間の遅延が必要であれば、BackgroundWorker類を使用して問題を簡単に解決することができる。
この構成要素を使うのは実は非常に簡単で、例えば、画面上のプログレスバーを更新しながら、バックグラウンドスレッド内で時間消費演算を行うような小さな例を作っている。プロセスは以下の通りです。1.Windowsフォームアプリケーションを新規作成します。例えば、Background WorkerProgess BarDemo 2.ProgessBarとBackground WorkerをFormにドラッグします。3.下記のコードコードコードのcopyを過去に行けばOKです。コードコメントの詳細は必要に応じて修正できます。

namespace BackgroundWorkerProgressBarDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Shown += new EventHandler(Form1_Shown);

            // To report progress from the background worker we need to set this property
            backgroundWorker1.WorkerReportsProgress = true;

            // This event will be raised on the worker thread when the worker starts
            backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);

            // This event will be raised when we call ReportProgress
            backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
        }

        void Form1_Shown(object sender, EventArgs e)
        {
            // Start the background worker
            backgroundWorker1.RunWorkerAsync();
        }

        // On worker thread so do our thing!
        void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            // Your background task goes here
            for (int i = 0; i <= 100; i++)
            {
                // Report progress to 'UI' thread
                backgroundWorker1.ReportProgress(i);
                // Simulate long task
                System.Threading.Thread.Sleep(100);
            }
        }

        // Back on the 'UI' thread so we can update the progress bar
        void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            // The progress percentage is a property of e
            progressBar1.Value = e.ProgressPercentage;
        }
    }
}

バックグラウンドの操作を準備するには、DoWorkイベントのイベントハンドラを追加して、このイベントハンドラで時間のかかる操作を呼び出してください。
この操作を開始するなら、RunWorkerAyncを呼び出してください。
進捗更新の通知を受ける場合は、Progess Changedイベントを処理してください。
操作完了時に通知を受ける場合は、RunWorkerComplectedイベントを処理してください。
注意:
DoWorkイベントハンドラでユーザーインターフェースオブジェクトを操作しないように十分注意してください。プログレスChangedとRunWorkerComplettedイベントを通じてユーザーインターフェースと通信するべきです。
BackgroundWorkカー事件はApp Domain境界を越えないで封送処理を行います。BackgroundWorkerコンポーネントを使用しないで、複数のアプリDomainでマルチスレッド操作を実行してください。
バックグラウンド動作にパラメータが必要な場合は、RunWorkerAryncを呼び出したときにパラメータを与えてください。DoWorkイベントハンドラ内部では、Dowork EventArgs.Agment属性からこのパラメータを抽出することができます。