1. 程式人生 > >C#中執行緒間操作無效: 從不是建立控制元件 txtBOX 的執行緒訪問它

C#中執行緒間操作無效: 從不是建立控制元件 txtBOX 的執行緒訪問它

delegate void 委託名(方法名);

void 方法名()

if(txtBox.invokeRequered)

{

委託名 d=new 委託名();

txtBox.invoke(d);

}

else

{

具體的執行語句

}

原來是存在跨執行緒呼叫控制元件的問題

解決方法有兩種:第一是加一句話,第二是用委託。因為一句話成功了 我就沒有用委託了~  

1.解決方法就加了一句話

private void mycomm_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

        {

            ////////////////////執行緒開始的時候加這麼一句

            Control.CheckForIllegalCrossThreadCalls = false;

            string str = mycomm.ReadExisting().ToString();

            txtreceive.Text = txtreceive.Text + str;

        }

ok 程式就執行成功了~

第二:
用委託,在05裡,每個控制元件都有個InvokeRequired的屬性~
判斷一下是不是true,是的話進行Invoke

操作的,完事了~

//建立個委託
        private delegate void ShowDelegate(string strshow);

        public void Show(string strshow)

        {

            if (this.txtreceive.InvokeRequired)

            {

             //   this.txtreceive.BeginInvoke(new ShowDelegate(Show), strshow);//這個也可以

                this.txtreceive.Invoke(new ShowDelegate(Show), strshow);

            }

            else

            {

                    this.txtreceive.Text += strshow;

            }

        }

第一種方法只是簡單的將錯誤提示禁用了,仍然存在跨執行緒呼叫控制元件的問題。為此可能造成兩個執行緒同時或者迴圈改變該控制元件的狀態導致執行緒死鎖。 

Invoke方法是同步的方法,所以執行過程是有先後順序的,所以就不會出現那個異常了 最好是用第二種方法

相關推薦

C#執行操作無效: 從不建立控制元件 txtBOX執行訪問

delegate void 委託名(方法名); void 方法名() { if(txtBox.invokeRequered) { 委託名 d=new 委託名(); txtBox.invoke(d); } else { 具體的執行語句 } } 原來是存在跨執行緒呼叫控制元件的問題

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 》 臨磷

執行操作無效: 從不建立控制元件“label1”的執行訪問C#定時器

我在使用執行緒操作winfrom控制元件物件的時候報錯,後來才發現問題所在:多執行緒中直接呼叫介面控制元件的方法是錯誤的做法,Invoke 和 BeginInvoke 就是為了解決這個問題而出現的,使你在多執行緒中安全的更新介面顯示 使用委託的時候是使用 Invoke

C#執行之間操作無效|不允許訪問控制元件c# 執行操作無效: 從不建立控制元件“”的執行訪問

解決方法 1.建立事件委託 c#不允許對跨執行緒的控制元件的訪問,如需操作跨執行緒的操作需要通過委託(delegate),即是函式指標來操作跨執行緒。說明dgList控制元件不是該執行緒的控制元件,需要使用委託操作。比如:delegate void SetListBoxCa

c#關於“執行操作無效: 從不建立控制元件執行訪問”的問題

摘自:http://blog.csdn.net/hongkaihua1987/article/details/7439231    http://hi.baidu.com/jcserver/blog/item/b7e8da3e2f6f35f0828b13f1.html 經典

執行操作無效: 從不建立控制元件“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

執行操作無效: 從不建立控制元件“progressBar1”的執行訪問

2、建立代理delegate void SetTextCallback(string text);建立和啟動執行緒this.demoThread =                 new Thread(new ThreadStart(this.ThreadProcUnsafe));           

執行操作無效: 從不建立控制元件執行訪問的三種解決方法

今天遇到這個問題,百度了下,把解決的方法總結出來。 我們在ui執行緒建立的子執行緒操作ui控制元件時,系統提示錯誤詳細資訊為: 執行緒間操作無效: 從不是建立控制元件“XXX”的執行緒訪問它。 就我知道的有三種方法,先看一下msdn的介紹: 訪問 Windows 窗

執行操作無效: 從不建立控制元件...的解決辦法

執行緒間操作無效: 從不是建立控制元件“…”的執行緒訪問它。它在VS2003裡邊不會出現這個問題,在VS2005和VS2008版本里就會出這個問題的,主要是為了安全考慮哦,目前我知道的解決方法有兩個… 第一: 使用遮蔽執行緒間進行不安全監測的方法。 Control.

BackGroundWorker解決 執行操作無效: 從不建立控制元件執行訪問

在程式設計中經常會遇到在一個按鈕中執行復雜操作,並將複雜操作最後返回的值加入一個ListView或ComboBox中候選。這個時候程式會卡,當程式設計師將這些卡程式碼放進執行緒(Thread)中後發現當對控制元件操作時出現“執行緒間操作無效: 從不是建立控制元件的執行緒訪問它

C#執行操作無效(跨執行訪問控制元件

很多朋友在剛接觸Winfrom的時候會遇到這個問題:執行緒間操作無效,從不是建立控制元件textbox1的執行緒訪問它。 這裡有提供兩種解決方法。 第一種  System.Windows.Form

C# 執行操作無效

轉載出處 許多新學習C#的新手進行介面操作的時候,在啟用新執行緒時操作介面元素經常會遇到的問題,我曾經也是,特此來分享下經驗: 以下面小列子為例,給出這個問題的解決辦法。下面的列子是以一個計數器為列講解的。 public Form1() { InitializeCom

執行操作無效從不建立控制元件”txtContent”的執行訪問

出現的問題:   void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)         {             byte[] readBuffer = new byte[seriaRe

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。 假設平臺上同時有很多使用者在操作,在不考慮效率的情況下,我們用同步方法來模