在我們開發軟體時經常會需要跟新介面上的某個控制項來顯示相關的資訊。
當我們的介面需要在程式執行中不斷更新資料時,當乙個textbox的資料需要變化時,為了讓程式執行中不出現介面
卡死的現像,最好的方法就是
多執行緒來解決
乙個主線程來
建立介面,使用乙個子執行緒來執行程式並
更新主介面,
這樣就不會出現卡死的現像了,
這肯定是沒有問題的,但是,我們會發現如果我們在子執行緒中去變動乙個不是在這個執行緒中建立的控制項的時候,系統會報錯,這個時候我們就需要使用到委託來完成這個操作。
委託是c#程式設計乙個非常重要的概念,網路上經常會有人說委託是什麼?**是什麼?區別是什麼?
其實委託和**是同乙個概念,只是沒有明確的官方同一定義所以,你翻譯為委託,我翻譯成**就這麼多區別。
eventhandler
是乙個宣告委託的微軟c#的命名標準,我的習慣是標準就要第一時間說,也就這個命名習慣要第一時間養成】
完了,這就是委託,就這麼簡單,看看和我們一般的方法有什麼區別呢?
委託型別宣告:
(1) 以deleagate關鍵字開頭。
(2)返回型別+委託型別名+引數列表。
言歸正傳
要實現標題的問題解決;簡單的幾步就可以
1.定義乙個委託;
2.繫結乙個方法;
3.子執行緒中呼叫執行
**如下:
[csharp]view plain
copy
using
system;
using
system.collections.generic;
using
system.componentmodel;
using
system.data;
using
system.drawing;
using
system.linq;
using
system.text;
using
system.threading.tasks;
using
system.windows.forms;
using
system.threading;
namespace
threadupdateui
public
form1()
private
void
dowork()
} private
void
button1_click(
object
sender, eventargs e)
} }
工作執行緒中如何更新介面
工作執行緒在更新程式介面時,很多時候會出現莫名奇妙的錯誤。我想了很多方法都不行,今天從委託中得到了靈感。那就是觸發介面的事件。主要的流程是 自定義事件訊息 如 define wm showflashadv wm user 103 自定義事件函式 lresult cadvisorywidgetdlg ...
MFC利用執行緒更新介面
error c2665 afxbeginthread 2 個過載中沒有乙個可以轉換所有引數型別 1.執行緒函式 必須是 靜態類成員函式 或者 全域性函式 cwinthread pthread afxbeginthread connectfunc,lpvoid this static uint con...
MFC 利用執行緒更新介面
非常感謝 baiyin 的文章 mfc在其他執行緒中重新整理主對話方塊中edit等控制項資料 正在進行的專案中,要在新開啟的執行緒中處理資料,並把資料的處理結果在介面控制項中更新,所以需要使資料處理執行緒傳送訊息給介面,下面是乙個小例子 1 在mfc的對話方塊中,新增乙個文字編輯框控制項 edit ...