视频一:线程的介绍及线程的基本语法
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();//启用线程 } } }
视频二:线程的高级写法接受任意参数
时间: 2024-10-05 23:09:00