Envoke и beginenvoke в чем разница?
Код:
if (this.InvokeRequired)
{
this.Invoke((Action)(() =>
{
this.Close();
}));
}
{
this.Invoke((Action)(() =>
{
this.Close();
}));
}
Код:
this.BeginInvoke((MethodInvoker)delegate { this.Close(); });
Читал, что в Envoke происходит ожидание вызывающего потока завершения UI потока, а в BeginEnvoke не происходит. Но я так и не разъяснил почему Close работает в одном и не работает в другом.
Delegate.Invoke: Выполняется синхронно, в том же потоке.
Delegate.BeginInvoke: Выполняется асинхронно, в ThreadPool(пуле потоков).
Control.Invoke: Выполняется в потоке user интерфейса, но вызывающий поток ждет завершения перед продолжением.
Control.BeginInvoke: Выполняется в потоке user интерфейса, но вызывающий поток не ждёт завершения.