2

私は.netにかなり慣れておらず、まだ多くのことを理解するのに苦労しています。現在、比較的単純なことを達成しようとしていますが、毎回失敗しています。スレッドを追加したいと思います。私のプログラムでは、このスレッドがWebサーバーへのアップロード操作を実行し、プログラムの応答性を維持して、ユーザーがファイルのアップロードのすべてのステータスを確認できるListViewを更新することで操作のフィードバックをユーザーに提供します。

このスレッドをプログラム内に配置して応答性を高める方法がわかりません。これまでのところ例が見つかりませんでした。スレッドとWinFormsの実際の使用法を示すための小さなサンプルを見つけようとしています。

4

1 に答える 1

3

使用したいのはですBackgroundWorker。まさにこの目的のために特別に設計されています。

private void button1_Click(object sender, EventArgs e)
{
    BackgroundWorker bgw = new BackgroundWorker();

    bgw.DoWork += (_, args) => LongRunningTask(bgw);
    bgw.WorkerReportsProgress = true;
    bgw.ProgressChanged += (_, args) =>
    {
        textbox1.Text = args.ProgressPercentage.ToString();
    };
    bgw.RunWorkerCompleted += bgw_RunWorkerCompleted;

    bgw.RunWorkerAsync();
}

private void LongRunningTask(BackgroundWorker bgw)
{
    for (int i = 0; i < 10; i++)
    {
        Thread.Sleep(1000);//placeholder for real work
        bgw.ReportProgress(i);
    }
}

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    //do stuff when completed.
}

注意すべき重要な点は、DoWorkイベントはバックグラウンドスレッドで実行されますが、他のイベントはすべてUIスレッドで実行されるということです。クラスは、BackgroundWorkderすべてが独自に行われるようにします。

于 2012-11-07T17:36:37.853 に答える