---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
单线程缺点和简单多线程操作
为什么要用多线程
(1)让计算机“同时”做多件事情,节约时间。
(2)后台运行程序,提高程序运行效率,也不会使主界面出现无响应的情况。
(3)多线程可以让一个程序“同时”处理多个事情。(用时间交换“空间”)
(4)计算机cpu大部分时间处于空闲状态,浪费了cpu资源。
例:单线程的缺点暴露出来,在用户进行计算的时候,又想做别的,但是UI卡死。。
//定义一个计数方法
void Count()
{
DateTime begin = DateTime.Now;
for (int i = 0; i < 999999999; i++)
{
}
TimeSpan now = begin.Subtract(DateTime.Now);
MessageBox.Show("运行完毕········"+now );
}
private void btnSingleThread_Click(object sender, RoutedEventArgs e)
{
Count();
}
使用多线程来解决UI卡死问题
//使用多线程来解决Ui卡死问题。
private void btnT_Click(object sender, RoutedEventArgs e)
{
//创建线程对象,传入要线程执行的方法。
Thread Multithread = new Thread(Count);
Multithread.IsBackground = true;
//启动线程,执行方法
Multithread.Start();
}
前台线程与后台线程
前台线程:只有所有的前台线程都关闭才能完成程序关闭时。
后台线程:只要所有的前台线程结束,后台线程自动结束。
将线程设置为后台线程: MultiThread.isbackground = true;
进程和线程的关系
注意:一个进程至少有一个线程,同一个进程中的多个线程之间可以“并发”执行。线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针,程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。多线程是指线程中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务(代码),也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
线程实现带参数的方法
例:
void ShowTxtName(object name)
{
if (name != null)
MessageBox.Show("name=" + name.ToString());
else
MessageBox.Show("null");
}
//线程执行带参数的方法
private void btnThreadWithPara_Click(object sender, EventArgs e)
{
ParameterizedThreadStart pts = new ParameterizedThreadStart(ShowTxtName);
//执行带参数的方法
Thread thread = new Thread(ShowTxtName);
thread.IsBackground = true;
thread.Start(txtName.Text);
}
}
public class MyThread
{
//--------------------执行不带参数的方法------------------
ThreadStart ts;
public MyThread(ThreadStart ts)//要求用户在new的时候传入方法委托
{
this.ts = ts;//将委托赋给全局变量
}
public void Start()
{
if (ts != null)
ts();//调用委托,执行委托里的方法
else
pts(null);
}
//--------------------执行带参数的方法---------------------
ParameterizedThreadStart pts;
public MyThread(ParameterizedThreadStart pts)//要求用户在new的时候传入方法委托
{
this.pts = pts;//将委托赋给全局变量
}
public void Start(object o)
{
pts(o);//调用委托,执行委托里的方法
}
}
例:
//------------------执行带多个参数的方法----------------------
void ShowTxtName2(object li)
{
List<string> list = li as List<string>;
if (list != null)
{
foreach (string s in list)
{
MessageBox.Show(s);
}
}
}
private void btnThreadWithManyPara_Click(object sender, EventArgs e)
{
Thread thread = new Thread(ShowTxtName2);
thread.IsBackground = true;
thread.Start(new List<string> { "佐助", "鸣人", "小樱" });
}
----------------------ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------