首先我們創建一個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();
使用調試方式運行程序的話會得到如下的異常(非調試方式不會):