首页 > 代码库 > 番外篇之多线程

番外篇之多线程

 

视频一:线程的介绍及线程的基本语法

           1.线程的创建
               Thread th = new Thread(Func);//创建线程
               th.Start();//启动线程
               private void Func()//线程执行的方法
               {///填写方法
               }

            2.学习线程最经典的错误

                2.1线程间操作无效:从不是创建控件“label1”的线程访问它。

                     解决方案:忽略异常,跨线程操作。 Control.CheckForIllegalCrossThreadCalls = false;//忽略跨线程间的调用,不推荐大家使用,它可能会引发一些未知的异常。

                 2.2创建窗口句柄时出错

                      引发原因:窗口被结束,但是线程还未结束。

                  2.3 th.IsBackground = true;//当前线程为后台线程

                        经常引发一个错误,当窗体关闭,方法内没有调用窗体控件时,虽然看着窗体已经结束,但是任务管理器中一样可以看到进程依然存在在运行。

                         原因:启用后台线程,但是UI关闭后,没有通知后台线程结束,主线程未完全退出,因为只要有一条子线程还在运行,那么它(子线程)将阻塞主线程关闭。

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Threading;using System.Windows.Forms;namespace 番外篇之多线程{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();            Control.CheckForIllegalCrossThreadCalls = false;//忽略跨线程间的调用,不推荐大家使用,它可能会引发一些未知的异常        }        private void Form1_Load(object sender, EventArgs e)        {                   }        private void Func()//线程执行的方法        {            for (int i = 0; i < 100000; i++)            {                label1.Text = i.ToString();            }        }        private void button1_Click(object sender, EventArgs e)        {            Thread th = new Thread(Func);//创建线程            th.IsBackground = true;//当前线程为后台线程            th.Start();//启用线程        }    }}
View Code

 

视频二:线程的高级写法接受任意参数

               

                

番外篇之多线程