小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

WinForm(C#)中跨線程訪問控件的解決方法

 orion360doc 2011-03-14


由于多線程可能導(dǎo)致對控件訪問的不一致,導(dǎo)致出現(xiàn)問題。C#中默認是要線程安全的,即在訪問控件時需要首先判斷是否跨線程,如果是跨線程的直接訪問,在運行時會拋出異常。

解決辦法有兩個:

1、不進行線程安全的檢查

2、通過委托的方式,在控件的線程上執(zhí)行

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //方法一:不進行跨線程安全檢查
            //System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
        }
  
        private void button1_Click(object sender, EventArgs e)
        {
            Thread th1 = new Thread(new ThreadStart(CalNum));
            th1.Start();
        }
  
        private void CalNum()
        {
            //button1.Enabled = false;
  
            int result = 0;
            for (int i = 1; i < 100000000; i++)
            {
                result += i;
            }
  
            SetCalResult(result);
  
            //button1.Enabled = true;
        }
  
        //方法二:檢查是否跨線程,然后將方法加入委托,調(diào)用委托
        public delegate void SetTextHandler(int result);
        private void SetCalResult(int result)
        {
            if (label2.InvokeRequired == true)
            {
                SetTextHandler set = new SetTextHandler(SetCalResult);//委托的方法參數(shù)應(yīng)和SetCalResult一致
                label2.Invoke(set, new object[] { result }); //此方法第二參數(shù)用于傳入方法,代替形參result
            }
            else
            {
                label2.Text = result.ToString();
            }
        }
    }

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多