0
假设我有一些在UI线程中运行的代码,它产生了一个在后台执行工作的新线程,然后继续执行UI工作。当后台工作完成时,BeginInvoke从新线程中调用。如果UI工作仍在进行,给BeginInvoke的回调会中断UI工作,还是会等待?可以在UI线程上运行BeginInvoke中断代码吗?
代码示例 - 添加一个名为Button1的按钮,一个表单并添加的button1_Click到它的Click事件,然后添加给表单:
bool continueWork = true;
private void button1_Click(object sender, EventArgs e)
{
Thread workThread = new Thread(performBackgroundWork);
workThread.IsBackground = true;
workThread.SetApartmentState(ApartmentState.STA);
workThread.Start();
for (long i = 0; i < long.MaxValue; i++)
{
if (!continueWork)
break;
button1.Text = i.ToString();
}
}
private void performBackgroundWork()
{
Thread.Sleep(1);
button1.BeginInvoke(new MethodInvoker(stopUIWork));
}
private void stopUIWork()
{
continueWork = false;
}
被点击后是什么Button1的文本?