首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

淺談 .NET 多線程與並行計算(八):WinForm 多線程編程基礎(上)

     編輯:關於ASP.NET

UI 線程阻塞問題與跨線程操作異常

按鈕點擊事件中執行耗時操作(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:跨線程操作無效

調試模式下會拋出 InvalidOperationException:「非建立控件的線程訪問它」。非調試模式雖不拋異常,但行為未定義(可能畫面錯亂、資料損毀)。

解決之道:必須使用 Control.Invoke 或 BeginInvoke 將 UI 更新封送回 UI 線程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved