按鈕點擊事件中執行耗時操作(Thread.Sleep(1000) + 字串建構)會導致 UI 凍結 1 秒,無法拖動、縮放視窗。
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; // 非 UI 線程直接操作控件
}).Start();

調試模式下會拋出 InvalidOperationException:「非建立控件的線程訪問它」。非調試模式雖不拋異常,但行為未定義(可能畫面錯亂、資料損毀)。
解決之道:必須使用 Control.Invoke 或 BeginInvoke 將 UI 更新封送回 UI 線程。