実行フロー:
- メインスレッドから、長時間実行されるプロセスを実行している新しいスレッド (並列スレッド) を呼び出しました。
- 並列スレッドがメイン スレッド UI を更新しています。
- 並列スレッドが完了するまでメインスレッドを待機させました。
- 2 つのスレッド間の同期が必要です。
- メインスレッドで並列スレッドの結果を使用する必要があるため、並列プロセスが完了するまでメインスレッドをブロックしました。
これが問題のある私のコードです。問題を解決するための提案をしてください。
private readonly AutoResetEvent _resetEvent = new AutoResetEvent(false);
private event EventHandler Workcompleted;
private void button1_Click(object sender, EventArgs e)
{
Workcompleted += Completed;
Thread thr = new Thread(UpdateUI);
thr.Start("");
_resetEvent.WaitOne();
// Logical operation dependent on parallel process final result
}
private void Completed(object sender, EventArgs args)
{
_resetEvent.Set();
}
private void UpdateUI(object txt)
{
for (int i = 0; i < 10; i++)
{
if (label1.InvokeRequired)
{
label1.Invoke(new ParameterizedThreadStart(UpdateUI), i.ToString());
}
else
{
label1.Text = (string)txt;
Thread.Sleep(100);
}
}
if (Workcompleted != null)
Workcompleted(this, new EventArgs());
}