Перевод EventAggregators использования SynchronizationContext в VB.Net - PullRequest
0 голосов
/ 19 мая 2010

Работа с довольно большим бэк-офисным приложением VB.Net winforms. 1 миллион + LOC. Большой шарик грязи, 90% всего кода находится в формах и других элементах управления пользовательского интерфейса.

Медленно внедряя лучшую архитектуру, насколько позволяют время и ресурсы, мы использовали идеи из 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 (message) <- операндом AddressOf должно быть имя метода. </p>

Я уверен, что упускаю что-то простое, но, глядя на это в течение 2 дней, я потерялся.

1 Ответ

0 голосов
/ 19 мая 2010

Попробуйте следующее

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

Проблема в том, что вы пытаетесь перевести делегаты C #, которые не поддерживаются в VB, до VB9. Этот стиль делегата void return фактически не поддерживается до VB10.

Лучший перевод - использовать прямых делегатов. В зависимости от подписи вышеперечисленное должно работать. если нет, пожалуйста, опубликуйте подпись для слушателя. Обращайтесь, чтобы мы могли дать лучший ответ.

...