2010-11-18 4 views
2

Gurus NET ... Comment convertir ce bloc en VB?Différences de gestion d'événements entre C# et VB.NET

this.timer = new System.Timers.Timer(100); 
this.timer.Elapsed+=new System.Timers.ElapsedEventHandler(ManageThreads); 
this.timer.Start(); 

Lorsque j'utilise un convertisseur en ligne (Telerik), la ligne médiane convertit comme ceci:

Me.timer.Elapsed += New System.Timers.ElapsedEventHandler(ManageThreads) 

avec 2 erreurs: 1- « eventElapsed public est un événement et ne peut pas être appelé directement. Utilisez RaiseEvent 2- délégué nécessite une Adess d'expression. Est-ce que j'ajoute simplement "adresse de"?

Tout indice. chaleureusement la bienvenue

+3

Convertisseur de crappy, c'est assez basique. –

Répondre

5

La syntaxe pour ajouter des gestionnaires d'événements est très différent entre C# et VB.NET et comme vous l'avez découvert, Telerik ne gère pas très bien cette différence.

C# ajouter la syntaxe du gestionnaire:

<object>.<event> += <event_handler_function> 

ajouter VB syntaxe gestionnaire:

add handler <object>.<event>, addressof <event_handler_function> 

Il y a une autre prise que vous pourriez rencontrer avec la gestion des événements VB: L'objet que vous êtes l'ajout d'un gestionnaire d'événements pour doit être déclaré à class-scope. Par exemple. vous ne pouvez pas ajouter un gestionnaire à un objet créé localement (dans une méthode) et le renvoyer ou l'ajouter à une collection. Donc, vous avez essentiellement une variable temp de niveau classe lorsque vous avez besoin de faire les choses dynamiquement.

Bonne chance.

+0

Pour que VB.NET câble automatiquement un événement à quelque chose en utilisant le mot clé 'Handles', cette chose doit être déclarée à la portée de la classe comme une propriété auto-event en utilisant le mot-clé' WithEvents', mais je suis sûr que cette restriction ne ne s'applique pas avec le code AddHandler/RemoveHandler manuel; est-ce que je me trompe? – supercat

+0

Votre dernier paragraphe est incorrect. Vous n'avez cette restriction que lorsque vous déclarez un objet 'WithEvents' si vous câblez manuellement des événements, vous pouvez le déclarer où vous le souhaitez –