剛學c#,用部落格的形式把自己的學習心得記錄下來,這是我的第一篇文章,哈哈,如果有什麼問題,可以指出。
前段時間寫了乙個串列埠收發的c#窗體應用程式,因為串列埠收發是在後台執行的,所以開了乙個執行緒專門用於收發,建立執行緒的語句如下:
private thread mworkthread;
mworkthread = new thread(new threadstart(threadcalc));
mworkthread.isbackground = true;
mworkthread.start();
threadcalc函式是後台的執行函式,如下:
private void threadcalc()
...........
if(bneedrefresh)
this.invoke(new delegaterefresh(refreshled));
thread.sleep(10) ;// (1000);
}}
delegateled和delegaterefresh是在類中宣告的委託,如下:
public delegate void delegateled(bool bset);
public delegate void delegaterefresh();
其中的函式setorresetled和refreshled就是需要訪問顯示執行緒中建立的控制項的函式,如下:
private void setorresetled(bool bset)
private void refreshled()
如果不使用invoke方法而直接把button1.text=「reset「寫入執行緒threadcalc中,則通常會導致不可預知的結果。如果出現編譯通不過的情況,可以設定變數checkforillegalcrossthreadcalls=false。
我理解的是invoke就像是vc++中的sendmessage。
c 多執行緒 Invoke方法的使用
在多執行緒程式設計中,我們經常要在工作執行緒中去更新介面顯示,而在多執行緒中直接呼叫介面控制項的方法是錯誤的做法,invoke 和 begininvoke 就是為了解決這個問題而出現的,使你在多執行緒中安全的更新介面顯示。正確的做法是將工作執行緒中涉及更新介面的 封裝為乙個方法,通過 invoke ...
c 多執行緒 Invoke方法的使用
在多執行緒程式設計中,我們經常要在工作執行緒中去更新介面顯示,而在多執行緒中直接呼叫介面控制項的方法是錯誤的做法,invoke 和 begininvoke 就是為了解決這個問題而出現的,使你在多執行緒中安全的更新介面顯示。正確的做法是將工作執行緒中涉及更新介面的 封裝為乙個方法,通過 invoke ...
c 多執行緒 Invoke方法的使用
在多執行緒程式設計中,我們經常要在工作執行緒中去更新介面顯示,而在多執行緒中直接呼叫介面控制項的方法是錯誤的做法,invoke 和 begininvoke 就是為了解決這個問題而出現的,使你在多執行緒中安全的更新介面顯示。正確的做法是將工作執行緒中涉及更新介面的 封裝為乙個方法,通過 invoke ...