------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
黑马程序员论坛,单线程与多线程比较:
单线程只能做一件事情,多线程可以做多种事情。多线程的应用,可以让一个程序同时做多种事情,提高效率。
单线程一次只会响应一个操作,当在响应一个操作的时候,用户再进行其他操作是不会响应的,最简单常见的一个列子就是用户界面。利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应,下面我们会说到。
默认一个进程只有一个线程,当我们想让一个进程做多种事情的时候,就应该多开线程;一个进程至少有一个线程,同一个进程中的多个线程之间可以并发执行。所谓线程并发执行,大致可以理解为,同时做多种事情;其实是每种事情做一段时间再切换到另一件事情,来回切换的执行。
多线程的优缺点:
使用线程可以把占据时间长的程序中的任务放到后台处理;可以让用户界面更吸引人;可能使程序的运行速度更快等等。
但是如果线程使用的太多可能会影响性能,操作系统需要不断的切换线程;更多的线程需要更多的内存空间;可能会带来更多bug等等。
.Net中如何实现多线程:
线程是要执行一段代码的。要产生一个线程,必须先为该线程写一个方法,该方法中的代码就是该线程运行所要执行的代码。线程启动时,要通过委托调用该方法(线程启动时,调用传过来的委托,委托就会执行相应的方法,实现线程执行方法)
当我们启用一个新线程的时候,要引用Threading命名空间。然后创建一个新线程Thread 名字 = new Thread(要新线程执行的方法);然后调用该线程的start方法,即名字. Start();然后就标记了该线程可以被CPU执行了,具体执行的时间由CPU决定。这里要执行的方法要是void的无参的方法或者是void的含有object类型参数的方法。
前台线程和后台线程:
一个线程默认的都是前台线程,想将一个线程设置为后台线程,需要把该线程的IsBackground设置为true,即名字.IsBackground = true;。
只有所有的前台线程都关闭才能完成程序关闭;只要所有的前台线程结束,后台线程就自动直接结束。
看以下小例子:
我们创建一个Winform程序,添加两个按钮,一个为“单线程”,一个为“多线程”,分别点击,创建一个Add方法,进行for循环;单线程直接调用,多线程启动一个线程调用;界面如图:
代码如下:
Add方法:
void Add()
{
for (int i = 1; i <= 700000000;i++ )
{
}
MessageBox.Show("over");
}
按钮单线程点击代码:
private void btnDan_Click(object sender, EventArgs e)
{
Add();
}
按钮多线程点击代码:
private void btnDuo_Click(object sender, EventArgs e)
{
Thread thread = new Thread(Add);
thread.Start();
}
当我们点击按钮单线程的时候,拖动界面,发现我们是拖动不了界面的,只有for循环完毕,弹出over的时候才可以拖动;而点击按钮多线程,直接就可以拖动界面,同时for循环完毕,也会弹出over。但是我们会发现,关掉主窗口的时候,弹出来的over窗口还在,程序并没有完全关闭,还需要再关闭over窗口;这就是上面说的前台线程和后台线程的问题。我们需要在多线程里加一行代码:
thread.IsBackground = true;
把它设为后台线程。
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------