Dupliquer possible:
Accès à la valeur de retour depuis la fonction déléguée de Thread.Start ()
public string sayHello(string name)
{
return "Hello ,"+ name;
}
Comment puis-je utiliser cette méthode dans Thread?
Cette méthode ThreadStart accepte uniquement les méthodes void.
J'attends vos aides ... Merci.
ThreadStart
n'attend pas seulement des méthodes void, il s'attend également à ce qu'ils ne prennent aucun argument! Vous pouvez l'envelopper dans un lambda, un délégué anonyme ou une fonction statique nommée.
Voici une façon de le faire:
string res = null;
Thread newThread = new Thread(() => {res = sayHello("world!");});
newThread.Start();
newThread.Join(1000);
Console.Writeline(res);
Voici une autre syntaxe:
Thread newThread = new Thread(delegate() {sayHello("world!");});
newThread.Start();
La troisième syntaxe (avec une fonction nommée) est la plus ennuyeuse:
// Define a "wrapper" function
static void WrapSayHello() {
sayHello("world!);
}
// Call it from some other place
Thread newThread = new Thread(WrapSayHello);
newThread.Start();
Vous devriez utiliser un Task à cette fin.
Si vous pouvez utiliser n'importe quelle méthode de threading, essayez BackgroundWorker
:
BackgroundWorker bw = new BackgroundWorker();
public Form1()
{
InitializeComponent();
bw.DoWork += bw_DoWork;
bw.RunWorkerCompleted += bw_RunWorkerCompleted;
bw.RunWorkerAsync("MyName");
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Text = (string)e.Result;
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
string name = (string)e.Argument;
e.Result = "Hello ," + name;
}