2010-05-19 84 views
0

使用相當大的VB.Net後臺winforms應用程序。 100萬+ LOC。 大泥巴球,90%的代碼都在Forms &其他UI控件中。將SynchronizationContext的EventAggregators用法轉換爲VB.Net

緩慢地引入更好的架構作爲時間& recources允許,我們一直在使用Jeremy Miller的EventAggrgator的想法。

http://codebetter.com/blogs/jeremy.miller/archive/2008/01/11/build-your-own-cab-extensible-pub-sub-event-aggregator-with-generics.aspx

起初我剝離出來的SynchronizationContext的使用。現在我正在嘗試將它引入回來,並且我正在努力將lamda的東西從c#轉換爲vb.net。

特別是這一行的C#

_context.Send(delegate { receiver.Handle(subject); }, null); 

這是vb.net我到目前爲止:

_context.Send(New SendOrPostCallback(AddressOf listener.Handle(message)), Nothing) 

我得到的錯誤是

listener.Handle(消息)< - AddressOf操作數必須是方法的名稱。

我敢肯定我錯過了一些簡單的事情,但在盯着這2天后,我迷路了。

回答

0

請嘗試以下

_context.Send(New SendOrPostCallback(AddressOf listener.Handle), message) 

的問題是你想翻譯未在VB支持,直到VB9 C#的代表。直到VB10之前,這種代表風格的函數,無效返回,實際上並不支持。

最好的翻譯是直接使用代表。根據簽名,上述內容應該有效。如果沒有,請張貼聆聽者簽名。處理,以便我們可以給出更好的答案。

+0

甜,非常感謝。 也不得不嚴格禁止選項以避免縮小的implict類型轉換。 – 2010-05-19 15:14:05

+0

僅供參考,listener.Handle看起來像這樣: 公共接口IListener(Of T) 子句柄(ByVal message As T) End Interface – 2010-05-19 15:22:57