Вызов метода, когда поток завершается

ArrayList<String> both = new ArrayList(Arrays.asList(first));
both.addAll(Arrays.asList(second));

both.toArray(new String[0]);
6
задан RaYell 27 July 2009 в 13:53
поделиться

5 ответов

Класс BackgroundWorker существует для такого рода управления потоками, чтобы избавить вас от необходимости свертывать свои собственные; он предлагает событие RunWorkerCompleted, которое вы можете просто прослушать.

11
ответ дан 8 December 2019 в 04:31
поделиться

В конце метода потока вы можете вызвать Close () с помощью метода Invoke () (поскольку большинство методов WinForms следует вызывать из потока пользовательского интерфейса):

public void Synchronize()
{
   Invoke(new MethodInvoker(Close));
}
1
ответ дан 8 December 2019 в 04:31
поделиться

Если вы посмотрите на BackgroundWorker, там есть событие RunWorkerCompleted, которое вызывается, когда рабочий процесс завершается.

Для получения дополнительной информации о BackgroundWorkers Щелкните здесь

Или

Вы можете добавить вызов полной функции из потока после ее завершения и вызвать ее.

void Synchronize()
{
    //DoWork();
    //FinishedWork();
}

void FinishedWork()
{
if (InvokeRequired == true)
  {
  //Invoke
  }
else
  {
  //Close
  }
}
6
ответ дан 8 December 2019 в 04:31
поделиться

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

thread = new Thread(() => { Synchronize(); OnWorkComplete(); });

...

private void OnWorkComplete()
{
    Close();
}
6
ответ дан 8 December 2019 в 04:31
поделиться

Посмотрите на делегатов IAsyncResult, BeginInvoke и AsyncCallback

1
ответ дан 8 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: