為了保證介面的使用者體驗經常要把資料處理等放到子執行緒中進行,然後把結果更新到主介面,通常有這樣幾種方法。
1.啟動執行緒時把控制項關聯變數的指標傳參給執行緒函式,這種方法無疑是最簡單的方法,但極容易造成訪問異常,因為vc6中的控制項都不是執行緒安全的。
2.就是先進一點的方法,把控制項的控制代碼傳給執行緒函式,有時也不好用在子執行緒中通過sendnotifymessage or postmessage等進行操作。這種方法是執行緒安全的,但對許多未公開控制項你根本不知道要傳送什麼訊息的,比如絕大多數的activex控制項,像msflexgrid、dbgrid,它們的訊息id是無從知曉的,這種時候第二種方法就沒用了。
3.這種方法我感覺是最萬能的方法了,而且這樣**的邏輯也最清楚。就是在視窗類中針對執行緒要進行的操作自定義訊息,啟動執行緒時直接把視窗的控制代碼傳給執行緒函式,執行緒要控制介面時直接給視窗發訊息就可以了。視窗類中對自定義訊息新增訊息對映,在其中進行具體的控制操作。
自定義訊息:
WIN FORM 多執行緒更新UI 介面控制項
方法1,更新單個控制項 public delegate void controltextmethod control control,string text private void setcontroltext control control,string text else 需要更新控制項的te...
C 多執行緒控制控制項例項
該例項功能為 多執行緒控制ui控制項 執行緒函式實現自動加1。介面如下 委託處理方法 關聯與listboxdelegate private void listbox else 如果是在另一線程操作listbox,則啟用委託 listbox1.invoke new listboxdelegate li...
C 在多執行緒內控制winform控制項
private delegate void flushclient 委託 private void form1 load object sender,eventargs e private void threadfunction private void crossthreadflush 要點1 因...