重複の可能性:
別のスレッドからプログレスバーを更新する
私のプログラムでは、GUI以外の機能を別のクラスに分離し、GUIに関連するものをメインクラスに残したいと思いました。ただし、workerクラスのworkerメソッドの1つがジョブを実行しているときに、進行状況バーを更新する際に問題が発生します。ここでマルチスレッドを使用する必要があることはわかっていますが、その方法がわかりません。簡単なことが足りないかもしれませんが、それに関する情報を探すと、ほとんどのチュートリアルで細目について説明しているように見えますが、全体像をうまく説明していません。私はinvokeコマンドとdelegateコマンドが何であるかを部分的に理解していますが、それらがどのように相互作用するかは本当に理解していません。
以下は私がやりたいことの簡略版です。これを変更してプログレスバーを更新し、ウィンドウの応答性と再描画を維持するにはどうすればよいですか?
メインフォームクラス:
public partial class Form1 : Form
{
time_waster thing = new time_waster();
public Form1()
{
InitializeComponent();
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
}
private void button1_Click(object sender, EventArgs e)
{
thing.something_that_takes_a_while();
}
}
個別のワーカークラス:class time_waster {public time_waster(){}
public void something_that_takes_a_while()
{
int delay = 200;
for (int i = 0; i < 100; i++)
{
Thread.Sleep(delay);
//appropriate code to update the progress bar for each iteration of the for loop.
}
}
}