2010-05-19 1 views
0

Utilisation d'une application WinForms VB.Net de taille relativement importante. 1 million + LOC. Grosse boule de boue, 90% de tout le code est dans les formulaires & autres contrôles de l'interface utilisateur.Traduction de l'utilisation de SynchronizationContext par EventAggregators sur VB.Net

Lentement introduire une meilleure architecture que le temps & recources permet, Nous avons utilisé des idées de l'EventAggrator par Jeremy Miller.

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

Dans un premier temps, je dépouillé l'utilisation de SynchronizationContext. Maintenant, je suis en train de le réintroduire, et je me bats avec la traduction de la substance lamda de C# à vb.net.

Plus précisément, cette ligne de C#

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

C'est le vb.net je jusqu'à présent:

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

L'erreur que je reçois est

listener.Handle (un message < - L'opérande AddressOf doit être le nom d'une méthode.

Je suis sûr qu'il me manque quelque chose de simple, mais après avoir regardé cela pendant 2 jours, je suis perdu.

Répondre

0

Essayez le

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

Le problème suivant est que vous essayez de traduire C# délégués qui ne sont pas pris en charge dans VB jusqu'à VB9. Ce style de délégué, "void return", n'est pas réellement supporté jusqu'à VB10.

La meilleure traduction consiste à utiliser des délégués droits à la place. Selon la signature, ce qui précède devrait fonctionner. Si ce n'est pas le cas, veuillez poster la signature de listener.Handle afin que nous puissions donner une meilleure réponse.

+0

doux, merci beaucoup. a également dû désactiver l'option strict pour éviter une réduction du type implicite. –

+0

pour référence, écouteur.Handle ressemble à ceci: Interface publique IListener (Of T) Sous la poignée (message ByVal As T) Interface End –