2009-05-22 11 views
0

double exact de Using OpenNETCF.Net.Ftp inside a class instead of inside a Windows FormEn utilisant OpenNETCF.Net.Ftp l'intérieur d'une classe personnalisée au lieu de l'intérieur d'un Windows Form


Jusqu'à présent, je suis en utilisant un objet FTP dans un formulaire Windows. objet FTP fonctionne dans un thread séparé, afin d'assurer que mon application ne gèle pas, j'utiliser le morceau de code suivant:

private void OnResponse(string response) 
    { 
     if (this.InvokeRequired) 
     { 
      this.Invoke(new StringDelegate(OnResponse), new object[] { response }); 
      return; 
     } 
    } //end of OnResponse 

Je ne suis pas tout à fait clair sur ce qu'est un délégué de chaîne est, mais cela fonctionne .

Cependant, je suis en train de refactoriser et je souhaite cacher le ftp dans une classe. Ma question est comment puis-je m'assurer que le thread principal ne gèle pas? Toutes les références en ligne concernant l'organisation d'événements à l'intérieur des classes ont un sens, mais je n'ai pas trouvé un seul exemple où l'application est multithread. Ma plus grande préoccupation serait InvokeRequired.

Dans le code ci-dessus "Ceci" est une forme. Si je cache l'objet ftp dans une classe comme les suivants:

abstract class MyClass 
{ 
    //data members 
    private FTP _ftp; 

    //other data members, methods, and properties etc 
} 

« Ce » devient un objet de MyClass. Je ne suis pas sûr si la propriété InvokeRequired est implémentée sur la classe (peut-être devrais-je la faire implémenter une interface spéciale qui a cette propriété?). Ou peut-être qu'il me manque quelque chose et je ne suis pas censé utiliser des objets multithread dans les classes?

J'utilise C# et asp.net 2.0 avec VS 2008.

+0

duplication possible de [Utilisation de OpenNETCF.Net.Ftp dans une classe au lieu d'un Windows Form] (http://stackoverflow.com/questions/899328/using-opennetcf-net-ftp-inside-a-class- Au lieu de l'intérieur d'une fenêtre-forme) –

Répondre

1

seulement InvokeRequired et Invoke doivent être utilisés au niveau de l'interface utilisateur, afin d'assurer que vous ne pas interagir avec vos commandes sur une interface utilisateur non fil. Si MyClass n'est pas un composant de l'interface utilisateur, vous n'avez rien à craindre.

Lorsque vous devez vous inquiéter, c'est lorsque MyClass interagit avec l'interface utilisateur. Par exemple, si MyClass va déclencher un événement suite à OnResponse et que l'interface utilisateur va observer cet événement, alors dans le gestionnaire d'événements de l'interface utilisateur, vous devrez utiliser InvokeRequired et Invoke.

Questions connexes