C# nom de la méthode prévue
Je viens d'essayer de transmettre certaines valeurs, mais c'est jeter une erreur tout le temps. Peut-on corriger moi ce que je suis en manque ici?
Obtiens l'erreur ici
Thread t_PerthOut = new Thread(new ThreadStart(ReadCentralOutQueue("test"));
Je veux passer cette valeur de chaîne à ReadCentralOutQueue
.
class Program
{
public void Main(string[] args)
{
Thread t_PerthOut = new Thread(new ThreadStart(ReadCentralOutQueue("test"));
t_PerthOut.Start();
}
public void ReadCentralOutQueue(string strQueueName)
{
System.Messaging.MessageQueue mq;
System.Messaging.Message mes;
string m;
while (true)
{
try
{
}
else
{
Console.WriteLine("Waiting for " + strQueueName + " Queue.....");
}
}
}
catch
{
m = "Exception Occured.";
Console.WriteLine(m);
}
finally
{
//Console.ReadLine();
}
}
}
}
- "C'est jeter une erreur" n'est pas très précis, ce qui est l'exception? (Il serait utile si vous avais journal de l'exception, plutôt que de simplement en utilisant un simple bloc catch.) Notez que le code que vous avez posté n'est même pas valide - vous avez donné un
else
bloc sansif
bloc.
Vous devez vous connecter pour publier un commentaire.
Ce code:
essaie de l'appeler
ReadCentralOutQueue
et puis créer un délégué du résultat. Ce n'est pas d'aller travailler, parce que c'est une méthode void. Normalement, vous devriez utiliser un méthode de groupe pour créer un délégué ou un fonction anonyme comme une expression lambda. Dans ce cas, une expression lambda sera plus simple:Vous ne pouvez pas utiliser
new Thread(ReadCentralOutQueue)
comme leReadCentralOutQueue
ne correspond pas à la signature, soitThreadStart
ouParameterizedThreadStart
.Il est important que vous compreniez pourquoi vous obtenez cette erreur, ainsi que la façon de le résoudre.
EDIT: Juste pour prouver qu'il ne travail, voici une courte mais complète du programme:
ReadCentralOutQueue
ne correspond pas à celui deThreadStart
ouParameterizedThreadStart
.Thread
constructeur, vous aurez besoin de l'un de ces deux - la lambda expression est juste la création d'unThreadStart
ici en utilisant une conversion implicite.Paramètres ne sont pas autorisés dans le cadre de la ThreadStart délégué. Il existe plusieurs autres solutions pour le passage d'un paramètre à un nouveau thread, discutés ici: http://www.yoda.arachsys.com/csharp/threads/parameters.shtml
Mais celui qui serait probablement plus simple dans votre cas est la méthode anonyme:
Vous devez le faire comme ceci:
Aussi
ParameterizedThreadStart
s'attend à un délégué qui prend unobject
comme paramètre si vous avez besoin de changer votre signature au présent: