浅谈.NET下的多线程和并行计算(八)Winform中多线程编程基础 上2011-08-03 博客园 lovecindywang首先我们创建一个Winform的应用程序,在上面添加一个多行文本框和一个按钮控件,按钮的事件如下 :
Thread.Sleep(1000);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++)
   sb.Append("test");
string s = sb.ToString();
textBox1.Text = s;首先我们可以把这个操作理解为一个非常耗时的操作,它至少占用1秒的时间。在1秒后,我们整了一 个大字符串作为文本框的值,然后在标签上显示给文本框赋值这个UI渲染行为需要的时间,程序执行结果 如下:

我们可以感受到,在点击了按钮之后整个程序的UI就卡住了,没有办法拖动没有办法改变大小,用于 体验非常差。一般能想到会新建一个线程来包装这个方法,使得UI线程不被卡住:
new Thread(() =>
{
   Thread.Sleep(1000);
   StringBuilder sb = new StringBuilder();
   for (int i = 0; i < 10000; i++)
     sb.Append("test");
   string s = sb.ToString();
   textBox1.Text = s;
}).Start();使用调试方式运行程序的话会得到如下的异常(非调试方式不会):
