我還在計劃階段,所以我沒有完整的代碼來顯示。但是我很好奇如果想要在不同程序集之間同步線程,將如何使用manualresetevent。例如,我在執行task1()的assembly1中編寫了classA。接下來,我在Assembly2中創建另一個classB,創建一個線程來運行classA.task1()。我想讓classB等到classA完成。重要的是(我們假設)我在一個單獨的線程上運行它。總之,一個代碼片段看起來像:我可以在程序集之間使用ManualResetEvent嗎?
Assembly2.ClassB:
private void main() { // for brevity
Thread newThread = new Thread(new ThreadStart(assembly1.classA.task));
newThread.Start();
// Wait until some process in classA.task() is done
if(classA.mySocket.Connected) {
// this may never occur because task1() didn't complete it's job
}
// do the rest
}
Assembly1.ClassA
public Socket mySocket;
public void task1() {
// must stop all other threads until these lines have
// been processed
// create socket, and connect to remote endpoint
// Ok, to signal other threads to continue.
startReceiving();
}
private void startReceiving() {
while(IsValid) {
mySocket.Receive(); //
}
}
我需要在這兩個類創建ManualResetEvents?這如何工作?
謝謝!
編輯: 我已經更新的代碼更有效的例子,請不要介意語法,我只是想傳達出的主意。
您應該只需要創建在B中的一個手動重置事件。在新線程上調用task1並等待它結束 – tam