如何在winform程式中,讓介面不再卡死。 關於委託和asynccallback的使用。
介面卡死的原因是因為耗時任務的計算占用了主線程,導致主介面沒有辦法進行其它操作,比如拖動。造成介面卡死的現象。我們只需要把耗時任務放在子執行緒中執行就可以了。
子執行緒的計算結果 要更新到介面中,怎麼更新呢,因為不能操作主線程 ,所以要用委託來實現 。
我們來看個例子。
介面上乙個按鈕加一人richbox , 點選以後獲得當前所在年份
定義乙個委託實現子執行緒更新主線程
public delegate void updatetext(string message);
public void updatetextmehod(string message)
按鈕的點選事件
func委託:表示模擬乙個耗時的操作(2s),然後返回乙個結果 。
asynccallback:表示在相應非同步操作完成時呼叫的方法。在這個方法中,獲取非同步執行的結果。
要獲取非同步執行的結果,要呼叫func.encinvoke(iasyncresult)
例項化更新主線程 的委託updatetext,然後非同步呼叫,在func委託的計算結果 賦值給介面
func非同步呼叫 ,把該非同步的的**方法當做引數傳入。
funcfunc = new func(() =>
);asynccallback callback=new asynccallback((x) =>
);func.begininvoke(callback, "object vlaue");
最後一句**,可以寫成這樣,但是會卡死,
var res =func.begininvoke(null,null);
var result1 = func.endinvoke(res).tostring();
richtextbox1.text += result1.tostring();
所以非同步方法的執行結果要放在**函式中,這樣就不會卡死主介面。
切記。
WinForm介面布局
一直很羨慕和佩服園子中伍華聰的介面設計和布局。好多年都沒有真正寫過c s專案了,今天翻出來6年前剛開始學習winform的時候寫的乙個簡單的hr管理系統,思緒一下子很複雜,記得是6年前的夏天,天氣很熱,租住的房子裡沒有空調,身邊放個扇子,人家週末出去玩的時候,我還在拼命的敲著 一心只想著好好提高技術...
winForm呼叫HTTP簡訊介面
最近我們使用了乙個簡訊介面,是http的,給出的訪問方式都是乙個個 引數就附在後面,又是?又是 之類。真是第一次見。怎麼呼叫呢?總不能在伺服器開個瀏覽器,上面在不停地訪問對方站點吧?我想用winform的方式。可以使用httpwebrequest httpwebresponse。測試之後,發現是可以...
c 與 winform 介面開發
c 與 net 開發,一堆又一堆的新名詞,頭暈目眩,比如 clr apartments sta mta com 吐槽無力,只乙個問題 微軟真的是軟體公司,而不是文學公司?form1.cs 與 form1.designer.cs 是 2 個檔案,一起定義了乙個 form 的行為 樣式等。在 vs201...