1. 程式人生 > >C# 多執行緒,跨執行緒訪問

C# 多執行緒,跨執行緒訪問

        private void button4_Click(object sender, EventArgs e)
        {
            Thread thread1 = new Thread(ShowResult);
            thread1.IsBackground = true;
            thread1.Start();
        }
        private void ShowResult()
        {
            int a = 0;
            for (int i = 0; i < 600000000; i++)
            {
                a = i;
            }
            if (this.textBox1.InvokeRequired)//是否要對文字框進行跨執行緒訪問。
            {
                //Invoke:去找建立TextBox的執行緒(主執行緒(UI執行緒)),由主執行緒完成委託方法的呼叫。
                this.textBox1.Invoke(new Action<TextBox, string>(ShowTextBoxValue), this.textBox1, a.ToString());//Action是無返回值的委託
            }
            else  //否則不是跨執行緒訪問
            {
                this.textBox1.Text = a.ToString();  
            }
        }

        //委託註冊的函式,跨執行緒訪問,跨執行緒修改TextBox的值,其實是通過invoke方法讓主執行緒呼叫該方法。
        private void ShowTextBoxValue(TextBox txt,string value)
        {
            txt.Text = value;
        }