执行流程:
- 从主线程我调用了新线程(并行线程),它正在执行一个长时间运行的过程。
- 并行线程正在更新主线程 UI。
- 我让我的主线程等到并行线程完成。
- 我需要两个线程之间的同步。
- 我需要在主线程中使用并行线程的结果,所以我阻塞了主线程,直到并行进程完成。
这是我的代码有问题,请提出解决问题的建议。
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());
}