BeginInvoke
и Invoke
означает запуск кода в потоке пользовательского интерфейса.В этом случае, если вы звоните CallGetDBValues()
из потока пользовательского интерфейса, вы ничего не получите.
Обычно вы создаете BackgroundWorker
или фоновый поток, который выполняет тяжелую работу и вызывает Invoke обратно.для потока пользовательского интерфейса значения, которые должны быть обновлены.
A BackgroundWorker
, вероятно, будет лучшим решением (см. ответ Robaticus), но вот версия фонового потока.
private delegate void CallAsyncDelegate();
private void button_Click( object sender, EventArgs e )
{
Thread thread = new Thread( GetDBValues );
thread.IsBackground = true;
thread.Start();
}
private void GetDBValues()
{
foreach( ... )
{
Invoke( new CallAsyncDelegate( UpdateUI ) );
}
}
private void UpdateUI()
{
/* Update the user interface */
}