Подтвердить что ты не робот

Метод потока С# возвращает значение?

Возможный дубликат:
Возвращаемое значение доступа из функции делегирования Thread.Start()

public string sayHello(string name)
{
    return "Hello ,"+ name;
}

Как я могу использовать этот метод в Thread?

Этот метод ThreadStart просто принимает методы void.

Я жду твоей помощи. Спасибо.

4b9b3361

Ответ 1

Не только ThreadStart ожидает методы void, но также ожидает, что они не будут принимать какие-либо аргументы! Вы можете обернуть его в лямбда, анонимный делегат или именованную статическую функцию.

Вот один из способов сделать это:

string res = null;
Thread newThread = new Thread(() => {res = sayHello("world!");});
newThread.Start();
newThread.Join(1000);
Console.Writeline(res);

Вот еще один синтаксис:

Thread newThread = new Thread(delegate() {sayHello("world!");});
newThread.Start();

Третий синтаксис (с именованной функцией) является самым скучным:

// Define a "wrapper" function
static void WrapSayHello() {
    sayHello("world!);
}

// Call it from some other place
Thread newThread = new Thread(WrapSayHello);
newThread.Start();

Ответ 2

Для этой цели вы должны использовать Задача.

Ответ 3

Если вы можете использовать любой метод потоковой передачи, попробуйте 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;
}