C 關於多執行緒之執行緒中窗體之間的控制項值呼叫

2022-07-20 14:42:14 字數 1349 閱讀 1620

本週做了乙個執行緒中開啟多個窗體的東西,父窗體開啟子窗體,父窗體獲取子窗體的控制項值,此處我在開啟窗體時,分別在不同的執行緒中開啟的,不做多考慮,上手就做,到後來程式崩掉了,原因是什麼了,找不到對應的控制項,這是為什麼了,因為建立子窗體的過程和建立父窗體的過程並不在同一執行緒中,程式無法獲知你要找的控制項,那麼對於這種情況,就得用到vs自帶的control.invokerequired方法,此方法返回的結果為bool型別,主要是「 獲取乙個值,該值指示呼叫方在對控制項進行方法呼叫時是否必須呼叫 invoke 方法,因為呼叫方位於建立控制項所在的執行緒以外的執行緒中。」   

關於invoke()方法,傳遞引數為乙個方法委託,它採用的引數的數量和型別與 args 引數中所包含的相同。摘要: 在擁有控制項的基礎視窗控制代碼的執行緒上,用指定的引數列表執行指定委託。

詳例說明

//

第一步:開啟窗體

sendemailprogress progress = new

sendemailprogress();

progress.closing += (s, ev) =>

else

};control.checkforillegalcrossthreadcalls = false; //

在這個類中我們不檢查跨執行緒的呼叫是否合法

thread = new thread(new

parameterizedthreadstart(showcommonprogressformdialog));

thread.start();

sendemailprogress.taxcardinfo info = progress.getcardinfo("

autoextract

", taxcardmodel);

sendemailprogress.cs檔案

錯誤的**:

public taxcardinfo getcardinfo(string

type, itaxcard card)

return

newtaxcardinfo();}

}正確的**:

public taxcardinfo getcardinfo(string

type, itaxcard card));}

using (edittaxcardpwd edittaxcardform=new

edittaxcardpwd(type,card))

return

newtaxcardinfo();}

}

同時,需要注意的是如果執行緒中開啟某個窗體,並且要為開啟的窗體附加樣式,一定要確保載入樣式的邏輯和開啟窗體的邏輯在同乙個執行緒裡!!!!!

此文僅做個人積累。。。。。。。

多執行緒之間同步

1 posix訊號量 includeint sem init sem t sem,int pshared,unsigned int value int sem destroy sem t sem int sem wait sem t sem sem trywait sem t sem int sem...

多執行緒之間通訊

多執行緒之間通訊,其實就是多個執行緒在操作同乙個資源,但是操作的動作不同。需求 第乙個執行緒寫入 input 使用者,另乙個執行緒取讀取 out 使用者.實現讀乙個,寫乙個操作。共享資源源實體類 class res輸入執行緒資源 class intthrad extends thread overr...

多執行緒之間通訊

多執行緒之間通訊 就是多個執行緒在操作同乙個資源,但是操作的動作不同 現在需要實現,生產一台電機,銷售一台電機問題。實現 執行結果 資料發生錯亂,造成執行緒安全問題 解決執行緒安全問題 通過wait notify來解決。wait和sleep的區別 wait可以指定時間也可以不指定時間,sleep必須...