寫在前面
在WinForm開發(fā)中,經(jīng)常會碰到主線程代碼運(yùn)行過程中需要刷新窗體控件的情況,如果直接在其他線程中去操作窗體控件,這時會拋出線程間操作無效的異常信息,因?yàn)榇绑w控件是由主線程創(chuàng)建的,C#強(qiáng)制要求代碼必須是線程安全的,所以不允許跨線程訪問。需要使用控件的Invoke方法,通過擁有控件的基礎(chǔ)窗口句柄的線程來執(zhí)行。
異常信息如下:
改成如下代碼就可以了?
代碼實(shí)現(xiàn)
Action<int> setText = (i) => { this.lblMessage.Text = $"第 {i} 次執(zhí)行"; };
var task = Task.Factory.StartNew(() => {
for (int i = 0; i < 100; i++)
{
Thread.Sleep(1000);
lblMessage.Invoke(setText, i);
//lblMessage.Text = $"第 {i} 次執(zhí)行";
}
});
執(zhí)行結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-758211.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-758211.html
到了這里,關(guān)于C# WinForm 跨線程訪問控件的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!