2010-04-16 22 views
1

Dans de nombreux endroits dans notre application, nous avons un code comme ceci:RAPI Approche: 1 instance statique pour l'application entière WinForms vs créer, connecter, disposer

using(RAPI rapi = new RAPI()) 
{ 
    bool connected = TryToConnectWithTimeout(rapi); 
    if(connected) 
    DoSomethingWithRapi(rapi); 
} 

Cela a bien fonctionné jusqu'à présent. Nous n'avons jamais plus d'une instance rapi à la fois. Jusqu'à maintenant:

Mais maintenant nous voulons écouter l'événement connect sur rapi. Nous faisons comme ceci:

assez bien
void StartMonitoringRapiConnection() 
{ 
_rapi = new RAPI(); 
_rapi.RAPIConnected += new RAPIConnectedHandler(_rapi_RAPIConnected); 
_rapi.RAPIDisconnected += new RAPIConnectedHandler(_rapi_RAPIDisconnected); 
_rapi.Connect(false,-1); 
} 

    private void _rapi_RAPIConnected() 
    { 
    DoWorkWhenRapiConnects(); 
    } 
    private void _rapi_RAPIDisconnected() 
    { 
     //Listen for the next time that rapi connects 
     _rapi.Connect(false,-1); 
     DoWorkWhenRapiDisconnects(); 
    } 

« StartMonitoringRapiConnection » fonctionne aussi longtemps que je ne commence à nouveau et connecter d'autres objets RAPI. Mais une fois que je commence à créer de nouveaux objets RAPI, les événements connect/disconnect semblent être hors service.

Cela fonctionnerait-il mieux d'avoir seulement 1 instance statique de RAPI pour l'application entière? Avez-vous d'autres conseils? Merci.

Répondre

1

Logiquement, RAPI est une connexion unique entre le PC et l'appareil. Cela n'a aucun sens que votre application accepte même plusieurs connexions. Je ferais un Singleton class qui résume les appels RAPI et fait tous vos appels pour que tous ceux qui ont besoin de parler à l'appareil passent par cette classe.

+0

Merci Chris. Puisque l'objet RAPI était iDisposable, nous avons peut-être essayé le paradigme using. merci de mettre les choses en perspective. –