日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

C#?winform跨線程操作控件的實現(xiàn)_C#教程

作者:xwwwill ? 更新時間: 2022-08-02 編程語言

前提:當(dāng)我們使用Winform開發(fā)的時候,經(jīng)常會遇到:System.InvalidOperationException:“線程間操作無效: 從不是創(chuàng)建控件“xxxx”的線程訪問它?!?/p>

原因:發(fā)生次異常的原因是因為winform在渲染UI界面和操作界面數(shù)據(jù)的時候使用的是同一個線程。當(dāng)我們創(chuàng)建另外一個線程,去操作此線程的UI控件,會導(dǎo)致線程不安全。winform為了防止線程不安全,因此杜絕了這個跨線程操作,并且拋出異常。

異常舉例:創(chuàng)建兩個控件,一個是按鈕控件,一個是lable控件

private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(()=>
            {
                if (this.InvokeRequired)
                {
                    this.Invoke(new Action(() =>
                    {
                        lable1.Text = "Hello Thread!";
                    }));
                }
            }
            );
            thread.IsBackground = true;
            thread.Start();
        }

當(dāng)執(zhí)行此按鈕的時候,會導(dǎo)致跨線程操作異常。

解決方案:

使用InvokeRequired屬性,判斷是否是線程安全。

if (this.InvokeRequired) 
{
    this.Invoke(new Action(() =>
    {
        lable1.Text = "Hello World!";
    }));
}
else
{
    lable1.Text = "Hello World!";
}

原文鏈接:https://blog.csdn.net/xwwwill/article/details/124151362

欄目分類
最近更新