单-多线程

有这样一个需求,一个小程序,上面有一个文本框和一个按钮,要求按下按钮时文本框里的内容从0循环变化到10000。
乍一看这不就是一个循环修改字符串嘛!可是写出来一运行,就会发现点按钮的时候程序卡死!
因为在同一个进程当中,代码是顺序执行的,我们同样可以让程序在初始化加载的时候就循环更新数字,结果就是循环还没执行完的时候窗口不显示,还是一种卡死的效果。
一种有效的办法就是给这个循环单开辟一个线程。

在按钮click事件里,开启一个新线程,Test是一个方法,这里传进的是个委托。

1 Thread th = new Thread(Test);

然后给这个线程定义为后台线程,让主窗体关闭时这个也关闭。

1 th.IsBackground = true;

告诉CPU可以开启这个线程。

1 th.Start();

Test方法就简单了,不用解释:

复制代码
1 void Test()
2 {
3 int number = int.Parse(textBox1.Text);
4 while (number < 10000)
5 {
6 number++;
7 textBox1.Text = number.ToString();
8 }
9 }
复制代码


最后在窗体构造函数里加上这么一句:

1 CheckForIllegalCrossThreadCalls = false;

由于计数线程使用了窗体上的东西,是跨线程操作,所以不检查跨线程调用的合法性。
这样一来就避免了UI卡死的问题。

 

线程类的常用成员:

Start()            启动线程
Abort()            终止线程
Name            线程名
CurrentThread        获得当前的线程引用
Thread.Sleep(1000)    可以使当前线程停止一段时间运行

posted @ 2013-06-18 12:50  -112  阅读(196)  评论(0编辑  收藏  举报