欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2022年06月08日 14:52:17   作者:xwwwill  
本文主要介紹了C#?winform跨線程操作控件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

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

異常舉例:創(chuàng)建兩個(gè)控件,一個(gè)是按鈕控件,一個(gè)是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í)行此按鈕的時(shí)候,會(huì)導(dǎo)致跨線程操作異常。

解決方案:

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

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

到此這篇關(guān)于C# winform跨線程操作控件的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C# winform跨線程操作控件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論