2012-01-26 48 views
0

我有一個Web服務實例化對象,訂閱該對象上的事件,然後調用該對象上的一個函數,這將導致事件被觸發。有沒有辦法等待事件觸發,以便我可以從EventArgs中獲取結果,以便將這些結果作爲Web服務的結果傳遞給它?如何從WCF Web服務中監聽對象上的事件?

+1

是方法的調用和事件的觸發同步還是異步? –

+0

它們是異步的 – adam0101

+0

也就是說,在對象上調用方法會啓動一個異步進程,最終完成並觸發事件。這是你的意思嗎? – adam0101

回答

1

您將需要某種與事件處理程序中獲取信號的事件(例如ManualResetEventSlim)關聯的同步原語。然後您的請求線程可以等待事件並在事件發生後收集結果並生成響應

但是,更自然的模型可能是將服務創建爲異步服務,並且只能在異步服務時完成處理操作完成 - 我創建了a sample of this一會兒回

+0

這聽起來類似於我在這裏找到的:http://stackoverflow.com/questions/475617/wrapping-an-asynchronous-method-synchronously-in-c-sharp但使用AutoResetEvent。 AutoResetEvent,ManualResetEvent和ManualResetEventSlim有什麼區別? – adam0101

+0

AutoResetEvent和ManualResetEvent是底層內核對象的包裝,而ManualResetEventSlim是一個完全託管的事件(所以更輕量化)。但ManualResetEventSlim僅在.NET 4.0中可用。服務員喚醒後,AutoResetEvents會將自己重置爲無信號。手動事件必須手動重置 –