Comment gérer les variables ThreadPool et membres?
-
11-09-2019 - |
Question
Je suis un peu nouveau pour ThreadPool dans .NET. Je me demandais, si je ne peux envoyer un objet à ma méthode de rappel, comment suis-je en mesure d'accéder à la variable de membre de classe pour appeler ses méthodes? (Voir CustomClass dans callback ())
Et comment pourrais-je charger les données de CustomClass? Est-ce que je passe le CustomClass à une méthode callback différente? cette approche est bien?
Comme vous pouvez le voir est un peu de manque d'expérience, de sorte que des conseils sur la route serait vraiment apprécié.
Merci, Kave
class Program
{
static void Main(string[] args)
{
CustomClass customClass = new CustomClass();
ThreadPool.QueueUserWorkItem(CallBack, "Hello");
Console.Read();
}
private static void CallBack(object state)
{
customClass.SaveData(state.ToString());
}
}
La solution
class Program
{
static void Main(string[] args)
{
CustomClass customClass = new CustomClass();
ThreadPool.QueueUserWorkItem(x => CallBack(customClass, "Hello"));
Console.Read();
}
private static void CallBack(CustomClass custom, string text)
{
customClass.SaveData(text);
}
}
Autres conseils
La meilleure façon de le faire est d'utiliser un pour capturer tous les variables que vous voulez (par exemple utiliser une méthode anonyme ou une expression lambda). Vous devez faire attention à exactement ce qui capturé si vous utilisez une boucle, mais il est plus pratique que de passer à travers un objet et d'avoir à jeter vers le bon type, etc.
En plus de ce qui a été dit: Si CustomClass
est sous votre contrôle et SaveData
est une invocation de manière asynchrone cas d'utilisation commune, vous pourriez penser à fournir une méthode SaveDataAsync
:
class CustomClass {
public void SaveDataAsync(string path) {
ThreadPool.QueueUserWorkItem(state => this.SaveData(path));
}
public void SaveData(string path) {
...
}
}