ArrayList<String> both = new ArrayList(Arrays.asList(first));
both.addAll(Arrays.asList(second));
both.toArray(new String[0]);
Класс BackgroundWorker существует для такого рода управления потоками, чтобы избавить вас от необходимости свертывать свои собственные; он предлагает событие RunWorkerCompleted, которое вы можете просто прослушать.
В конце метода потока вы можете вызвать Close () с помощью метода Invoke () (поскольку большинство методов WinForms следует вызывать из потока пользовательского интерфейса):
public void Synchronize()
{
Invoke(new MethodInvoker(Close));
}
Если вы посмотрите на BackgroundWorker, там есть событие RunWorkerCompleted, которое вызывается, когда рабочий процесс завершается.
Для получения дополнительной информации о BackgroundWorkers Щелкните здесь
Или
Вы можете добавить вызов полной функции из потока после ее завершения и вызвать ее.
void Synchronize()
{
//DoWork();
//FinishedWork();
}
void FinishedWork()
{
if (InvokeRequired == true)
{
//Invoke
}
else
{
//Close
}
}
Отредактируйте, чтобы он вызывал вспомогательный метод, чтобы он был чище.
thread = new Thread(() => { Synchronize(); OnWorkComplete(); });
...
private void OnWorkComplete()
{
Close();
}
Посмотрите на делегатов IAsyncResult, BeginInvoke и AsyncCallback