黑马程序员—学习笔记之C#多线程

时间:2023-02-20 10:36:13
---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ---------------------- 详细请查看: http://net.itheima.com/

一、进程与线程

(一)进程

简单的说,一个程序就是一个进程

(二)线程

线程是程序中的一个执行流。每个线程都有自己专有的寄存器(储存栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数

黑马程序员—学习笔记之C#多线程

(三)多线程

多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务(代码),也就是说允许单个程序创建多个并行执行的线程来完成各自的任务

1.CPU通过线程执行代码,如同商店通过工人来做店里要做的事情(如打扫、卖东西)

2.同一个进程中的多个线程可以“并发”执行。所谓“并发”执行,并不是真正的同时执行

3.一个CPU在同一时刻只能执行一个线程。如果只有一个CPU,则CPU在多个线程之间来回切换

4.线程中包含寄存器,存储CPU执行到这个线程的哪一步。这样CPU在多个线程之间来回切换的时候就知道该从哪里继续

(四)进程与线程之间的关系

一个进程至少包括一个线程,即默认线程(主线程、UI线程)

(五)net中如何实现多线程

1.线程就是一个工人(帮工)。所以要产生一个线程,就必须先为该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码。(找个人来坐一件事情)

2.线程启动时,通过委托调用该方法。线程启动时,调用传过来的委托,委托就会执行相应的方法,实现线程执行方法

3.线程运行完所要执行的代码后自动停掉

(六)前台线程和后台线程

1.前台线程:只有所有的前台线程都关闭才能完成程序关闭

2.后台线程:只要所有的前台线程都关闭则后台线程自动结束。

threadFirst.Background = true;                    //把线程设置为后台线程

二、Thread类

Thread 实例名 = new Thread(方法名);

执行带参数的方法和带多个参数的方法,则将方法的传入参数类型设为object

(一)执行带参数的方法

        void ShowName(object name)
{
MessageBox.Show(name.ToString());
}
private void btnMultipleThreadWithParameter_Click(object sender, EventArgs e)
{
Thread threadShowName = new Thread(ShowName);
threadShowName.IsBackground = true;
threadShowName.Start("刘德华");

}

(二)执行带多个参数的方法

        void ShowManyName(object names)
{
List<string> nameList = names as List<string>;
foreach(string name in nameList)
{
MessageBox.Show(name);
}
}
private void btnMultipleThreadWithManyParameters_Click(object sender, EventArgs e)
{
Thread threadShowName = new Thread(ShowManyName);
threadShowName.IsBackground = true;
threadShowName.Start(new List<string>() { "刘德华","周杰伦","陈奕迅"});
}

(三)Start()方法

并不表示线程开始执行,而是表示该线程可以被CPU执行

(四)Abort()方法

在调用此方法的线程上引发ThreadAbortException,以终止线程。

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ---------------------- 详细请查看: http://net.itheima.com/