執行緒間操作無效: 從不是建立控制元件“label1”的執行緒訪問它。C#定時器
我在使用執行緒操作winfrom控制元件物件的時候報錯,後來才發現問題所在:多執行緒中直接呼叫介面控制元件的方法是錯誤的做法,Invoke 和 BeginInvoke 就是為了解決這個問題而出現的,使你在多執行緒中安全的更新介面顯示
使用委託的時候是使用 Invoke 方法訪問主執行緒程式,實現修改賦值給控制元件。
//解決無法訪問已釋放的資源物件 把使用的元素的Parent賦值為null
//定時器 private void button2_Click(object sender, EventArgs e) { System.Timers.Timer t = new System.Timers.Timer(100);//例項化Timer類,設定間隔時間為10000毫秒; t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到達時間的時候執行事件; t.AutoReset = true;//設定是執行一次(false)還是一直執行(true); t.Enabled = true;//是否執行System.Timers.Timer.Elapsed事件; if (this.IsDisposed) { t.Stop(); } } //定義執行緒呼叫的委託 public delegate void SetLabelDelegate(); //定時器實現的方法 public void theout(object source, System.Timers.ElapsedEventArgs e) { Thread th = new Thread(new ThreadStart(SetLab)); th.Start(); } //使用Invoke訪問主執行緒元素 public void SetLab() { if(label1.InvokeRequired) { if (!label1.IsDisposed)//沒有被釋放,即關閉了窗體 { // 這裡會報錯,無法訪問已釋放的物件 請在關閉窗體時加:this.label1.Parent = null; //try //{ label1.Invoke(new SetLabelDelegate(SetLabeDo)); //} //catch (Exception ex) //{ //} } else { } } } //解決無法訪問已釋放的資源物件 把使用的元素的Parent賦值為null private void Form1_FormClosing(object sender, FormClosingEventArgs e) { this.label1.Parent = null; //解決在 無法訪問已釋放的物件 }
相關推薦
執行緒間操作無效: 從不是建立控制元件“label1”的執行緒訪問它。C#定時器
我在使用執行緒操作winfrom控制元件物件的時候報錯,後來才發現問題所在:多執行緒中直接呼叫介面控制元件的方法是錯誤的做法,Invoke 和 BeginInvoke 就是為了解決這個問題而出現的,使你在多執行緒中安全的更新介面顯示 使用委託的時候是使用 Invoke
執行緒間操作無效: 從不是建立控制元件“XXX”的執行緒訪問它 [Winform]執行緒間操作無效,從不是建立控制元件的執行緒訪問它的幾個解決方案,async和await?
方法1 Invoke((MethodInvoker)(()=>{XXX.Text = message;})); 方法2 取消跨執行緒檢查 Control.CheckForIllegalCrossThreadCalls = false;
invoke委託解決“執行緒間操作無效: 從不是建立控制元件的執行緒訪問它”的問題
###1.問題描述 線上程中更改控制元件屬性時,編譯器報錯:“執行緒間操作無效: 從不是建立控制元件的執行緒訪問它”。檢視資料後得知這個問題的根本在於,建立新執行緒後,新執行緒跟主執行緒同步執行,這時如果新執行緒提出對控制元件進行修改,將被編譯器報錯,因為可能會出現主執行緒跟新執行緒同時
執行緒間操作無效: 從不是建立控制元件“”的執行緒訪問它~~~的解決方法~
http://www.cnblogs.com/HaoKeKe/p/4427902.html http://blog.csdn.net/dongzhe8/article/details/45791877 Control.CheckForIllegalCrossThreadCa
C#中執行緒間操作無效: 從不是建立控制元件 txtBOX 的執行緒訪問它
delegate void 委託名(方法名); void 方法名() { if(txtBox.invokeRequered) { 委託名 d=new 委託名(); txtBox.invoke(d); } else { 具體的執行語句 } } 原來是存在跨執行緒呼叫控制元件的問題
執行緒間操作無效: 從不是建立控制元件“progressBar1”的執行緒訪問它
2、建立代理delegate void SetTextCallback(string text);建立和啟動執行緒this.demoThread = new Thread(new ThreadStart(this.ThreadProcUnsafe));
執行緒間操作無效: 從不是建立控制元件的執行緒訪問它的三種解決方法
今天遇到這個問題,百度了下,把解決的方法總結出來。 我們在ui執行緒建立的子執行緒操作ui控制元件時,系統提示錯誤詳細資訊為: 執行緒間操作無效: 從不是建立控制元件“XXX”的執行緒訪問它。 就我知道的有三種方法,先看一下msdn的介紹: 訪問 Windows 窗
C#執行緒之間操作無效|不允許訪問控制元件(c# 執行緒間操作無效: 從不是建立控制元件“”的執行緒訪問它)
解決方法 1.建立事件委託 c#不允許對跨執行緒的控制元件的訪問,如需操作跨執行緒的操作需要通過委託(delegate),即是函式指標來操作跨執行緒。說明dgList控制元件不是該執行緒的控制元件,需要使用委託操作。比如:delegate void SetListBoxCa
執行緒間操作無效: 從不是建立控制元件...的解決辦法
執行緒間操作無效: 從不是建立控制元件“…”的執行緒訪問它。它在VS2003裡邊不會出現這個問題,在VS2005和VS2008版本里就會出這個問題的,主要是為了安全考慮哦,目前我知道的解決方法有兩個… 第一: 使用遮蔽執行緒間進行不安全監測的方法。 Control.
BackGroundWorker解決 執行緒間操作無效: 從不是建立控制元件的執行緒訪問它
在程式設計中經常會遇到在一個按鈕中執行復雜操作,並將複雜操作最後返回的值加入一個ListView或ComboBox中候選。這個時候程式會卡,當程式設計師將這些卡程式碼放進執行緒(Thread)中後發現當對控制元件操作時出現“執行緒間操作無效: 從不是建立控制元件的執行緒訪問它
c#關於“執行緒間操作無效: 從不是建立控制元件的執行緒訪問它”的問題
摘自:http://blog.csdn.net/hongkaihua1987/article/details/7439231 http://hi.baidu.com/jcserver/blog/item/b7e8da3e2f6f35f0828b13f1.html 經典
C#中執行緒間操作無效: 從不是建立控制元件 txtBOX 的執行緒訪問它。
delegate void 委託名(方法名); void 方法名() { if(txtBox.invokeRequered) { 委託名 d=new 委託名(); txtBox.invoke(d); } else { 具體的執行語句 } } 原來是存在跨執行緒呼叫控制元件的
c#中Invoke使用方法(執行緒間操作無效: 從不是建立控制元件的執行緒訪問它。那麼建立它的執行緒是哪個執行緒?)
CSDN線下沙龍開發者與企業雲通訊服務選型CSDN線下沙龍開發者與企業雲通訊服務選型 匕敵都s68AG賞臥7H7攪第恐蛹爻逞 《 http://pregnant.baidu.com/article/cb559e95710bac242ace33686de6d5eb 》 臨磷
執行緒間操作無效:從不是建立控制元件”txtContent”的執行緒訪問它
出現的問題: void comm_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] readBuffer = new byte[seriaRe
C#執行緒間操作無效(跨執行緒訪問控制元件)
很多朋友在剛接觸Winfrom的時候會遇到這個問題:執行緒間操作無效,從不是建立控制元件textbox1的執行緒訪問它。 這裡有提供兩種解決方法。 第一種 System.Windows.Form
C# 執行緒間操作無效
轉載出處 許多新學習C#的新手進行介面操作的時候,在啟用新執行緒時操作介面元素經常會遇到的問題,我曾經也是,特此來分享下經驗: 以下面小列子為例,給出這個問題的解決辦法。下面的列子是以一個計數器為列講解的。 public Form1() { InitializeCom
System.InvalidOperationException:“線程間操作無效: 從不是創建控件“txtPortName02”的線程訪問它。”
check leg txt http oss val rms thread 信息 “System.InvalidOperationException”類型的未經處理的異常在 System.Windows.Forms.dll 中發生 其他信息: 線程
System.InvalidOperationException:“線程間操作無效: 從不是創建控件“btnSearch”的線程訪問它。
src ear for 一行代碼 control ali cal 創建 false System.InvalidOperationException:“線程間操作無效: 從不是創建控件“btnSearch”的線程訪問它。”這個
2017.10.20 C#跨執行緒操作控制元件的執行緒安全方法
C#跨執行緒操作控制元件的執行緒安全方法 在C#中,經常用到這樣一個場景,Windows Form程式啟動一個工作者執行緒執行一部分工作,這樣做是為了避免速度慢的工作如果直接呼叫會使得主Form停止響應一段時間。 既然啟動了執行緒,就避免不了執行緒之間資料傳遞的事情,相信你有很多種辦法
Java多執行緒/併發05、synchronized應用例項:執行緒間操作共享資料
電商平臺中最重要的一點就是賣東西。同個商品不能無限制的賣下去的,因為商品有庫存量,超過庫存就不能賣了。 這裡,約定一個規則,下單使庫存減n,取消訂單使庫存加m。庫存數量不可以小於0。 假設平臺上同時有很多使用者在操作,在不考慮效率的情況下,我們用同步方法來模