2012-12-26 3 views
0

Comment procéder pour créer un fil de discussion en C#?Création d'un fil de discussion en C#

En java je soit implémenter l'interface Runnable

class MyThread implements Runnable{ 
public void run(){ 
//metthod 
} 

puis

MyThread mt = new MyThread; 
Thread tt = new Thread(mt); 
tt.start() 

ou je pourrais simplement étendre la classe Thread

class MyThread extends Thread{ 
public void run(){ 
//method body 
} 

puis

MyThread mt = new MyThread 
mt.start(); 
+4

Suppression du '[java]' comme réponse ne sera pas sur Java (il est seulement mentionné dans la question) –

+1

Il y a plusieurs façons de le faire. Je suggère de jeter un oeil à [Threading in C#] (http://www.albahari.com/threading/) de Josef Albahari. C'est un bon début, bien que quelque peu daté (le TPL ne sera pas mentionné, par exemple). – Oded

+1

Si vous essayez de rechercher avec votre moteur de recherche préféré sur «C# Thread», vous trouverez une liste innombrable de liens. Démarrage, bien sûr, avec [MSDN] (http://msdn.microsoft.com/en-us/library/ms173178 (VS.80).aspx) – Steve

Répondre

6

Non, contrairement à Java, dans .NET, vous ne pouvez pas étendre la classe Thread car elle est scellée.

Donc, pour exécuter une fonction dans un nouveau thread la manière la plus naïve est de reproduire manuellement un nouveau thread et passer la fonction à exécuter (en fonction anonyme dans ce cas):

Thread thread = new Thread(() => 
{ 
    // put the code here that you want to be executed in a new thread 
}); 
thread.Start(); 

ou si vous ne voulez pas utiliser un délégué anonyme puis définir une méthode:

public void SomeMethod() 
{ 
    // put the code here that you want to be executed in a new thread 
} 

puis dans la même classe commencer un nouveau fil qui passe la référence à cette méthode:

Thread thread = new Thread(SomeMethod); 
thread.Start(); 

et si vous voulez passer des paramètres à la méthode:

public void SomeMethod(object someParameter) 
{ 
    // put the code here that you want to be executed in a new thread 
} 

puis:

Thread thread = new Thread(SomeMethod); 
thread.Start("this is some value"); 

C'est la façon native pour exécuter des tâches dans les discussions de fond. Pour éviter de payer le prix élevé de créer de nouvelles discussions, vous pouvez utiliser l'un des fils du ThreadPool:

ThreadPool.QueueUserWorkItem(() => 
{ 
    // put the code here that you want to be executed in a new thread 
}); 

ou en utilisant un asynchronous delegate execution:

Action someMethod =() => 
{ 
    // put the code here that you want to be executed in a new thread 
}; 
someMethod.BeginInvoke(ar => 
{ 
    ((Action)ar.AsyncState).EndInvoke(ar); 
}, someMethod); 

Et encore un autre, et plus moderne façon d'exécuter ces tâches est d'utiliser le TPL (à partir de .NET 4.0):

Task.Factory.StartNew(() => 
{ 
    // put the code here that you want to be executed in a new thread 
}); 

Donc, oui, comme vous pouvez le voir, il existe des gazzilions de techniques qui pourraient être utilisées pour exécuter un tas de code sur un thread séparé.

+1

En tant qu'informations supplémentaires, vous pouvez également créer un thread qui se répète à un intervalle spécifié à l'aide de la classe de thread 'Timer'. – Joe

+4

@Joe, ouais, comme je l'ai dit, il y a des façons gazzilion d'exécuter une tâche sur un thread d'arrière-plan. Les gens ont écrit des livres entiers sur ce sujet. Il est difficile de tous les couvrir dans une seule réponse SO. Je viens de donner quelques conseils au PO, afin qu'il puisse poursuivre ses recherches et, je l'espère, poser une question plus concrète la prochaine fois. –

+0

En effet. Je ne faisais que pointer la minuterie vers l'OP car c'est utile à savoir, et aussi pour m'assurer qu'il n'ajoute pas un peu de sommeil dans son fil pour imiter le Timer;) – Joe

Questions connexes