---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
进程与线程:一个进程至少有一个线程
同一个进程中的多个线程之间可以“并发”执行,线程不断切换,切换的很快。
切换线程可以在寄存器里保存。
线程是程序的一个执行流,每个线程都有一个专有的寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建并执行线程来完成格子的任务。
.NET中如何实现多线程
线程肯定也是要执行一段代码的,所以要产生一个线程,必须先问该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码
线程启动时,通过委托调用该方法(委托的好处)
(线程启动时,调用传过来的委托,委托就会执行相应的方法,实现线程执行方法)
在例子999999999的循环当中,单线程运行的缺点:数太多,UI卡死
可以用过线程来解决:
using System.Threading
void CountTime()
{
DateTime beginTime=DateTime.Now;
for(int i=0;i<999999999;i++)
{}
TimeSpan ts=beginTime.Subtract(DateTime.Now)
MessageBox.Show("循环完毕-----"+ts.TotalMilliseconds);
}
//使用多线程来解决UI卡死问题
private void btnMulThread_Click(object sender, EventArgs e)
{
Thread threadFirst=new Thread(CountTime);//创建线程对象,传入要线程执行的方法
threadFirst.Start();//启动线程时执行方法
}
产生线程的四个步骤:
1、编写产生线程所要执行的方法
2、引用System.Threading命名空间
3、实例化Thread 类,并传入一个指向线程所要运行的委托。(这个时候这个线程已经产生,但是还没有运行)
4、调用Thread实例Start方法,标记该线程可以被CPU执行了,但是具体执行时间由CPU决定。
当方法执行完成,线程自动停止。
线程不允许调用有返回值的函数。
前台线程和后台线程:
当界面关闭是UI线程关闭,系统线程没有关闭继续运行。
没有任何属性设置默认前台线程,应用程序退出,确保每一个前台线程全部退出。
前台线程:只有所有的前台线程都关闭才能完成程序关闭。
后台线程:只要所有的前台线程结束,后台线程自动结束。
如何将线程设为后台线程,将线程的IsBackground属性 =true.
多线程方法重入的问题
先举例:
//修改文本框的内容
void ChangeText()
{
for(int i=0;i<10000;i++)
{ int a=int.Parse(txtNum.Text);
a++;
txtNum.Text=a.ToString; //现在有异常,执行的线程不是创建窗体的线程
}
}
//方法重入问题
private void btnProblem_Click(object sender, EventArgs e)
{
Thread threadFirst=new Thread(ChangeText);//创建线程对象,传入要线程执行的方法
thread.IsBackground=true;//后台进程
threadFirst.Start();//启动线程时执行方法
}
注意:两个线程共享同一段代码区,但是执行是相对独立的。
有两个线程相互执行一个方法,当线程1执行快结束单位完成时,线程二继续执行。
线程实习带参数的方法
void ShowTxtName(object name)//带参数的线程参数类型为object
{
MessageBox.Show("name="+name.ToString())
}
//线程执行带参数的方法
private void btnThreadWithPara_Click(object sender,EventArgs e)
{
//ParameterizedThreadStart pts=new ParameterizedThreadStart(ShowTxtName);
Thread thread=new Thread(ShowTxtName);
thread.IsBackgroungd=true;
thread.Start(txtName.Text); //执行时将参数传进去
}
要调用带参数的Start,执行带参数的委托。
多线程执行带多个参数的方法
首先也要启动一个线程,对执行的方法传递多个参数。可以用数组,结构,集合等。方法中可用List<string> list
带参数的Start,可以new List<string>(){"","",""}
方法用作参数,用委托delegate
要调用带参数的Start,执行带参数的委托。
多线程执行带多个参数的方法
首先也要启动一个线程,对执行的方法传递多个参数。可以用数组,结构,集合等。方法中可用List<string> list
带参数的Start,可以new List<string>(){"","",""}
TRUNCATE TABLE [表1]
方法用作参数,用委托delegate
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://net.itheima.com/