天天看點

C#如何使用多線程

本人最近需要操作多線程,但是在C#中有一個問題,線程中操作主線程中的控件就會提示錯誤,或者操作有問題,為此可以使用委托代理的方法,以下是本人借鑒網上的内容自己編寫的例子:(在解說之後附帶程式代碼)

C#如何使用多線程

上圖為軟體控件界面,ListView控件中在Columns可以添加列資訊,但是為了得到上面的效果,需要将ListView控件中的View屬相設定成Details。

使用多線程需要引用System.Threading。

此外,為了在不同的方法之間傳遞資料資訊,可以設定全局變量:

public Thread thread = null;

public int iNo = 0;

public string strNo = null;

樓主發現,如果項目中包含多個界面,在界面之間傳遞資料的最好辦法是添加類,在類中申請變量,本項目添加一個類CCValue,并在CCValue中定義變量

public static bool thStop = false;//申請bool型變量控制線程啟停

開啟按鈕代碼:

        private void button1_Click(object sender, EventArgs e)

        {

            thread = new Thread(new ThreadStart(Dowork));

            thread.Start();

        }

退出按鈕代碼:(本按鈕隻是退出線程,并不是退出視窗)

        private void button3_Click(object sender, EventArgs e)

        {

            CCValue.thStop = true;

            thread.Join(1);

        }

Hello按鈕代碼:(本按鈕主要是為了測試是否真正的實作了多線程)

        private void button2_Click(object sender, EventArgs e)

        {

            MessageBox.Show("Hello");

        }

多線程操作代碼:

        public delegate void MyInvoke(string str1, string str2);

        public void Dowork()

        {

            while (!CCValue.thStop)

            {

                if (CCValue.thStop)

                {

                    break;

                }

                else

                {

                    strNo = iNo.ToString().Trim();

                    MyInvoke mi = new MyInvoke(UpdateForm);

                    this.BeginInvoke(mi, new object[] { "我是文本框", strNo });//注意此處的new object[] { "我是文本框", strNo }與下面的

                                                                                                                      //UpdateForm(string param1,string param2)是變量對應的,

                                                                                                                      //也即是向方法UpdateForm(string param1,string param2)

                                                                                                                      //傳送資料

                    Thread.Sleep(1000);

                    iNo++;

                }

            }

        }

        public void UpdateForm(string param1,string param2)

        {

            this.textBox1.Text = param1 + param2;

            ListViewItem item = new ListViewItem(param1);

            item.SubItems.Add(param2);

            listView1.Items.Add(item);

        }

以上操作結束以後大家一下就會已經實作了多線程。