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的文本?