单线程带来的问题
如果让一个程序做多个事,会出现“卡死”的状态
为什么用多线程:
1、让计算机“同时”做多件事情,节约时间
2、多线程可以让一个程序“同时”处理多个事情
3、后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况
4、获得当前线程和当前进程
线程分为前台线程和后台线程
1、前台线程:只有所有的前台线程都关闭,才能完成程序关闭
2、后台线程:只要所有的前台线程结束,后台线程自动结束
产生一个线程的步骤
1、编写产生线程所要执行的方法
2、System.Threading命名空间
3、实例化Thread类,并传入一个指向线程所要运行的方法委托(此时线程已经产生,但还没有运行)
4、调用Thread实例的Start方法,标记该线程可以被CPU执行,具体执行时间由CPU决定
在.Net下,不允许跨线程的访问
线程在被Abort(关闭线程的方法)之后就无法再重新Start了
Thread.Sleep(毫秒),静态方法,可以使当前线程停止一段时间运行
Name线程名
Thread.CurrentThread获得当前的线程引用
//创建一个线程去执行这个方法 Thread th; private void button1_Click(object sender, EventArgs e) { //创建一个线程去执行这个方法 th = new Thread(Test); //标记这个线程已经准备就绪了,可以随时被执行。具体什么时候执行这个线程,由CPU决定 //将线程设置为后台线程 th.IsBackground = true; th.Start(); //Test(); } private void Test() { for (int i = 0; i < 10000; i++) { //Console.WriteLine(i); textBox1.Text = i.ToString();//这个会导致跨线程操作,报异常 } } private void Form1_Load(object sender, EventArgs e) { //取消跨线程的访问 Control.CheckForIllegalCrossThreadCalls = false; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //当点击关闭主窗体的时候,判断新线程是否为null,如果不为null则手动关闭 if (th != null) { //结束这个线程 th.Abort(); //线程在被Abort之后就无法再重新Start了 } } }
时间: 2024-10-02 12:24:08