0

使用相当大的 VB.Net 后台 winforms 应用程序。100 万+ LOC。大泥球,90% 的代码都在表单和其他 UI 控件中。

在时间和资源允许的情况下慢慢引入更好的架构,我们一直在使用 Jeremy Miller 的 EventAgrgator 的想法。

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(message) <-- AddressOf 操作数必须是方法的名称。

我确定我错过了一些简单的东西,但是在盯着这个 2 天之后,我迷路了。

4

1 回答 1

0

尝试以下

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

问题是您正在尝试翻译在 VB9 之前不受 VB 支持的 C# 委托。直到 VB10 才真正支持这种类型的委托,即返回 void。

最好的翻译是使用直接代表。根据上面的签名应该可以工作。如果没有,请发布 listener.Handle 的签名,以便我们给出更好的答案。

于 2010-05-19T15:10:54.480 回答