C#多線程的異步

實現方法代碼示例:

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int a = 0;
            //多線程編程
            //委託:ParameterizedThreadStart
            Thread objThread1 = new Thread(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    a += i;
                    //控件的屬性:作用是用來判斷當前控件所在的使用環境是創建這個控件的線程(false)還是其他線程(true)
                    if (label1.InvokeRequired)
                    {
                        //控件的Invoke方法:方法中的第一個參數返回值爲void的委託,第二個參數是給委託對應方法傳遞的參數
                        label1.Invoke(new Action<string>(s =>
                        {
                            label1.Text = $"【{s}】";
                        }), a.ToString());
                    }
                    Thread.Sleep(500);
                }
            });
            objThread1.Start();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            int a = 0;
            Thread objThread02 = new Thread(() =>
            {
                for (int i = 0; i < 100; i++)
                {
                    a += i;
                    if (label2.InvokeRequired)
                    {
                        label2.Invoke(new Action<int>(s =>
                        {
                            label2.Text = $"【{s}】";
                        }), a);
                        System.Threading.Thread.Sleep(200);
                    }
                }
            });
            objThread02.Start();
        }
    }

當子線程未執行完畢,主線程關閉則會拋出異常:

解決方法:

       將程序中的子線程設置爲後臺線程則只要前臺線程關閉,則後臺也自動關閉!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章