в каком потоке находится обратный вызов BeginInvoke асинхронного делегата? - PullRequest
3 голосов
/ 17 мая 2010

В каком потоке должен быть обратный вызов BeginInvoke асинхронного делегата?
Поток пользовательского интерфейса или поток пула потоков.

например

private void button1_Click(object sender, EventArgs e)
{
    Func<string> func1 = LoadingDada;
    func1.BeginInvoke(IsDone, func1);
}


string LoadingDada()
{
    Thread.Sleep(10000);  //simulated a long running
    x = Thread.CurrentThread.Name;
    return "str_100000";
}

string IsDone(IAsyncResult a) 
{
    var loadingDataReturn = (Func<string>)a.AsyncState;
    string rr = loadingDataReturn.EndInvoke(a);

    textBox1.Text = rr;
} 

1 Ответ

4 голосов
/ 17 мая 2010

Вы вызываете BeginInvoke для делегата , так что это будет поток пула. Если бы вы позвонили BeginInvoke в элементе управления , это был бы поток пользовательского интерфейса.

К сожалению, BeginInvoke означает почти полную противоположность в этих двух сценариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...