C UI控制項執行緒問題

2021-06-21 00:42:44 字數 532 閱讀 5378

在處理乙個c#的頁面的時候,發現乙個致命的問題:

資料庫的查詢處理速度較慢,而如果是直接在頁面中的訊息處理函式中直接處理查詢

則會導致了ui介面因為等待函式的返回而產生了假死的情況出現。

所以對此的解決方案可以選擇是使用多執行緒的方法。

然而由於c#中只有建立ui控制項的執行緒才能有許可權對此ui控制項進行修改,所以直接使用c#中的多執行緒方法並不可行。

當執行到修改控制項相關資料的時候,程式將會丟擲異常,宣告並非同一執行緒,無法進行修改。

所以,可以考慮使用控制項上自帶的乙個方法:begininvoke。可以生成乙個可以合法修改ui的後台執行緒。

msdn:

使用過程:

1,宣告乙個委託,簽名需要和執行緒函式的簽名一致。

2,宣告委託的例項物件,然後向begininvoke函式傳入兩個引數:委託物件和乙個包含了所有引數的object陣列。

而如果需要返回值,可以在其他非阻塞的地方,呼叫控制項的endinvoke方法。

但是務必注意,endinvoke方法將會阻塞,一直到委託方法執行完畢為止。

控制項多執行緒訪問的問題

最近在修改打包的介面時候,發現debug的時候,會出現多執行緒不允許訪問控制項的問題,上網查了一下,大多數解決方法都是呼叫控制項的invoke的方法,或者乾脆遮蔽掉該異常資訊。不知道什麼時候控制項可以正常允許的多執行緒訪問?vs 多執行緒debug 真難受 不知道vs2008和vs2010有沒有改進...

多執行緒訪問視窗控制項時異常問題

net 1.1下允許非同步訪問,不會有異常 在新執行緒中訪問主線程的窗體控制項時會發生錯誤,這個問題大家都知道的。本來以為只要訪問控制項的 寫在窗體的方法中就ok了的,今天試驗了一下卻發生錯誤了。原因是.net 1.1下允許,net 2.0下不允許了。我的 是這樣的 有兩個類,乙個是窗體類,乙個是某...

C 跨執行緒呼叫窗體控制項的問題

前段時間遇到跨執行緒呼叫窗體控制項的問題,其實一句話system.windows.forms.control.checkforillegalcrossthreadcalls false 就可以解決,但感覺會有不穩定因素,因此在網上找了一些相應的文章感覺還不錯,第一種用的比較順手 注 在devexpr...