C# winform跨線程操作控件的實現
前提:當我們使用Winform開發的時候,經常會遇到:System.InvalidOperationException:“線程間操作無效: 從不是創建控件“xxxx”的線程訪問它。”
原因:發生次異常的原因是因為winform在渲染UI界面和操作界面數據的時候使用的是同一個線程。當我們創建另外一個線程,去操作此線程的UI控件,會導致線程不安全。winform為瞭防止線程不安全,因此杜絕瞭這個跨線程操作,並且拋出異常。
異常舉例:創建兩個控件,一個是按鈕控件,一個是lable控件
private void button1_Click(object sender, EventArgs e) { Thread thread = new Thread(()=> { if (this.InvokeRequired) { this.Invoke(new Action(() => { lable1.Text = "Hello Thread!"; })); } } ); thread.IsBackground = true; thread.Start(); }
當執行此按鈕的時候,會導致跨線程操作異常。
解決方案:
使用InvokeRequired屬性,判斷是否是線程安全。
if (this.InvokeRequired) { this.Invoke(new Action(() => { lable1.Text = "Hello World!"; })); } else { lable1.Text = "Hello World!"; }
到此這篇關於C# winform跨線程操作控件的實現的文章就介紹到這瞭,更多相關C# winform跨線程操作控件內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!