web-dev-qa-db-fra.com

La méthode du thread C # renvoie une valeur?

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.

19
Ogan Tabanlı

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();
37
dasblinkenlight

Vous devriez utiliser un Task à cette fin.

3
Jonathan Allen

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;
}
0
ispiro