2010-06-18 2 views
2

Je commence tout juste à entrer dans l'idée de filer, et je voulais savoir si je pouvais rendre cela plus abstrait. Les méthodes foo et bar dérivent des méthodes d'une classe de base, donc j'aimerais passer l'une ou l'autre et être capable de travailler en utilisant une méthode dérivée. J'aimerais aussi savoir comment vous nommez correctement les threads et les méthodes dans les threads.Nouveau sur le threading en C#, pouvez-vous rendre les méthodes de thread génériques et quels sont les dangers?

if (ChkFoo.Checked) 
      { 
       Thread fooThread = new Thread(new ThreadStart(this.ThreadedFooMethod)); 
       fooThread.Start(); 
      } 
    if (ChkBar.Checked) 
      { 
       Thread barThread = new Thread(new ThreadStart(this.ThreadedBarMethod)); 
       barThread.Start(); 
      } 
    . 
    . 
    . 
    public void ThreadedFooMethod() 
    { 
    Foo newFoo = new Foo(); 
    //Do work on newFoo 
    } 

    public void ThreadedBarMethod() 
    { 
    Bar newBar = new Bar(); 
    //Do similar work 
    } 

Merci à tous!

+1

avec les délégués .net2.0 et anonymes et tout ce jazz, vous n'êtes plus obligé de créer explicitement des instances de délégué, donc 'Thread fooThread = new Thread (nouveau ThreadStart (this.ThreadedFooMethod));' peut aussi être écrit plus de manière concise comme 'Thread fooThread = new Thread (ThreadedFooMethod); Que ce soit pour améliorer ou dégrader la lisibilité, c'est à vous de décider, juste un moment "plus vous savez" :) –

+0

Merci! L'endroit où j'investis utilise encore .net 2.0, et ils mettent lentement en place un plan pour s'adapter à la version 4.0. Cela dit, je suis sorti d'un tutoriel et utilisé le mot-clé "this" - mais c'est génial! Tout ce que je peux faire pour couper le code sans nuire à la performance ou à la lisibilité est utile. – ibarczewski

Répondre

1

Je voudrais utiliser une interface qu'ils implémentent tous les deux. Et si vous vous souciez vraiment si c'est un foo ou un bar, vous pouvez utiliser le mot-clé "is" et "as". Vous pouvez passer des éléments à un thread en utilisant le pool de threads, mais celui-ci doit être de type object.

ThreadPool.QueueUserWorkItem (nouveau WaitCallback ("FuncName"), nouveau "Foo ou Bar");

+0

+1 pour les interfaces! Yay! –

+0

Je n'ai pas pensé à ça. Je pense que c'est ce que je vais faire. – ibarczewski

Questions connexes