問題:執行一下**:報錯 大概意思就是跨執行緒操作,label沒法兒賦值
1.private void mainloop()
8.}解決方案:
一、在5-6行中間新增以下**:
checkforillegalcrossthreadcalls = false;//禁止編譯器對跨執行緒訪問做檢查
二、使用deletgate invoke來從其他執行緒呼叫
if(label.invokerequired)
;//或者
//actionactiondelegate = delegate(string txt) ;
this
.label.invoke(actiondelegate, str);
}else
或者如下invoke:
this.invoke(new action(()=>三、));或者單獨使用delegate,詳細參見delegate使用
使用deletgate begininvoke來從其他執行緒呼叫
invoke方法和begininvoke方法的區別是
invoke方法是同步的, 它會等待工作執行緒完成,
begininvoke方法是非同步的, 它會另起乙個執行緒去完成工作執行緒
四、backgroundworker 元件:(此方式本人暫未嘗試使用)
backgroundworker是.net裡面用來執行
private
void button4_click(object
sender, eventargs e)
}void bw_dowork(object
sender, doworkeventargs e)
void bw_runworkercompleted(object
sender, runworkercompletedeventargs e)
C 跨執行緒呼叫
private thread mythread private void form1 load object sender,eventargs e private void runsonworkerthread 如果您在 net framework 1.0版本中嘗試執行這段 也許會僥倖執行成功,或者...
C 跨執行緒呼叫UpdateData
用sendmessage的方式解決 菜鳥步驟 1 在主窗體標頭檔案中用下列函式註冊windows訊息 const uintwm myupdatedata registerwindowmessage t myupdatedata 2 在主窗體標頭檔案中的訊息對映函式申明處新增下列對映 afx msg ...
C 跨執行緒呼叫控制項
在c 應用程式開發中,我們經常需要把ui執行緒和工作執行緒分開程式設計,為了防止介面停止響應。同時,我們也需要在工作執行緒中去更新ui介面的控制項,在clr的執行緒安全中並不允許我們直接在工作執行緒操作ui介面。因此,介紹以下三種方式進行跨執行緒操作ui。private void button2 c...