我在寫一個c#組件,只會在我的公司內部使用。該組件封裝與特定桌面應用程序需要與之通信的多個服務器的通信。服務器可以將未經請求的消息發送到組件,這些組件在單獨的線程中被「捕獲」。如何在不阻塞並等待的情況下通知另一個線程上的某條消息的主線程?
我希望這個組件的大部分在其創建線程的上下文中執行。我不希望單獨的消息線程做任何消息處理。相反,我想通知主線程有一條等待處理的消息。想要在創建線程的上下文中執行的原因是庫的用戶可能不知道多線程,並且我希望能夠在可能的情況下同步所有操作。
有沒有一種簡單的方式發信號通知正在運行的線程?主線程將進行各種常量處理,並且消息線程將不斷旋轉等待消息。值得注意的是,消息線程被封裝在第三方庫中。一旦收到消息,它就會執行回調。我想回調做一些像mainthread.notify(消息)。
編輯: 對不起,我不太清楚我想讓主線程做什麼。我不希望主線程立即處理消息線程發送的消息。我希望它在不久的將來能夠處理消息(如WinForms消息循環的工作方式)。
編輯2:
場景:
Console App created on Thread1
Thread2 created, which spins listening for Messages
Console App runs as normal
Message arrives on Thread2
Thread2 fires event MessageReady(sender, message)
Thread2 continues spinning
At the earliest convenience, Thread1 processes the message from MessageReady
我已經做了一些閱讀,似乎編組代碼到另一個線程是一個相當困難的態度,我懷疑是同步這個過程將是值得的。
我得到了你沒有使用WCF的感覺。我建議你這樣做。 – 2010-01-18 01:27:42
不,我沒有使用WCF。發送/檢索到服務器的消息是許可的,並且提供庫以與它們一起工作。我不認爲WCF可以幫助我。 – 2010-01-18 02:07:37