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

C# WinForm 跨執行緒存取控制項問題 (1) — 問題由來與 CheckForIllegalCrossThreadCalls 臨時方案

     編輯:關於C語言

問題重現

直接在背景執行緒設定控制項屬性:

private void ThreadFunction() {
    while (true) {
        this.textBox1.Text = DateTime.Now.ToString();
        Thread.Sleep(1000);
    }
}

拋出異常:Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on. .NET 2.0+ 強化安全機制,禁止跨執行緒直接存取控制項。

方案一:關閉檢查(不推薦)

private void Form1_Load(object sender, EventArgs e) {
    Control.CheckForIllegalCrossThreadCalls = false; // 全域關閉檢查
    Thread thread = new Thread(ThreadFunction);
    thread.IsBackground = true; thread.Start();
}

程式可跑,但 CheckForIllegalCrossThreadCalls 為 static,修改影響全域。專案其他人員若改回 true,本模組即失效。且跨執行緒存取本應檢查,關閉檢查屬治標不治本。

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