为什么要使用多线程?
- 让计算机“同时”做多件事情,节约时间
- 多线程可以让一个程序“同时”处理多个事情
- 后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况
- 获得当前线程与当前进程
前台线程与后台线程
- 前台线程:只有所有的前台线程关闭才能完成程序关闭
- 后台线程:只要所有的前台线程结束,后台线程自动结束
线程的问题
- 如何实现多线程?
- 如何一个线程设置为后台线程?
- 如何跨线程访问?//这里标注的只是最初级的方法,还有其他方法,以后再试
- 关闭主线程时,由于种种原因无法同时关闭后台线程,导致后台线程还在访问窗体里的控件。导致报错怎么办?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Thread th;
private void button1_Click(object sender, EventArgs e)
{
//创建一个线程去执行这个方法
th = new Thread(Test);
//标记这个线程准备就绪了,可以随时被执行,具体什么时候执行这个线程
//由CPU决定
//前台线程与后台线程
//前台线程关闭,后台线程自动关闭
th.IsBackground = true;
th.Start();
}
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)
{
if(th !=null)
{
th.Abort();
}
}
}
进程类
进程类的常用方法如下:
//打开应用程序
Process.Start("notepad");
//通过一个进程打开指定的文件
//创建一个ProcessStartInfo类
ProcessStartInfo ps = new ProcessStartInfo(@"C:\Users\lones\Desktop\PITest.txt");
//创建一个Process类
Process p = new Process();
//将ps类赋值给startinfo
p.StartInfo = ps;
p.Start();
Console.ReadKey();