2009-10-13 10 views
0

J'ai écrit une bibliothèque qui gère toutes les communications TCP/IP avec notre matériel embarqué personnalisé. Il est utilisé avec la plupart de nos logiciels internes et pourrait éventuellement être vendu séparément.Comment puis-je éviter d'appeler chaque événement de ma bibliothèque externe?

La chose la plus ennuyante c'est que chaque fois que je gère des événements de la bibliothèque, je dois avoir une fonction séparée à invoquer. Je ne peux qu'imaginer qu'il y a un moyen plus facile de le faire que je ne sais pas ...

Des idées?

public Setup(DiscoveryReader reader) 
    { 
     download = new DownloadFilesIndividual(Reader.ip, DateTime.Today); 
     download.OnDownloadStatus += new DownloadStatusHandler(download_OnDownloadStatus); 
    } 

    void download_OnDownloadStatus(DownloadStatus status) 
    { 
     Invoke(new DownloadStatusHandler(this.safe_download_OnDownloadStatus), new object[] { status }); 
    } 

    void safe_download_OnDownloadStatus(DownloadStatus status) 
    { 
     // Do UI stuff here 
    } 
+0

Quelle est la raison exacte pour ce faire? Comment 'safe_download' est-il réellement" plus sûr "? –

+0

Ahhh, je vois. "Trucs d'interface utilisateur", heh. –

+0

L'invocation est nécessaire car la bibliothèque exécute la commande tcp dans un autre thread. Le thread tcp déclenche ensuite les événements qui ne peuvent pas directement manipuler le formulaire. safe_download n'est pas vraiment plus sûr, c'est juste un mot que j'ai pris l'habitude d'ajouter au début – Tim

Répondre

1

sucre syntactique

public Setup(DiscoveryReader reader) 
{ 
    download = new DownloadFilesIndividual(Reader.ip, DateTime.Today); 
    download.OnDownloadStatus += new DownloadStatusHandler(download_OnDownloadStatus); 
} 

void download_OnDownloadStatus(DownloadStatus status) 
{ 
    if(InvokeRequired) 
    { 
    Invoke(new Action<DownloadStatus>(download_OnDownloadStatus),status); 
    } else { 
    // Do UI stuff here 
    } 
} 
+0

J'aime ça! Je ne savais pas à propos de l'action . Ce serait bien si je pouvais inclure l'invocation dans la bibliothèque mais je ne suis pas sûr que ce soit possible! – Tim

+0

pourquoi "Invoke (nouvelle Action (download_OnDownloadStatus, status));" me donnant "Erreur - Nom de la méthode attendue" – Tim

+0

A travaillé, il devrait être: Invoke (nouvelle Action (download_OnDownloadStatus), statut); – Tim