У меня есть поток, который выполняет некоторую работу в фоновом режиме и передает обновления в форму с помощью методов Invoke, BeginInvoke. Поток создается после отображения формы, поэтому здесь нет проблем.
Вопрос в том, как правильно выключить. У моего рабочего потока есть возможность выйти, и он выйдет через некоторое время после этого (миллисекунды).
Однако, если форма закрылась первой, содержимое Invoke прерывается. Я попытался добавить Thread.Join к событию закрытия форм, но, конечно, это вызывает тупик даже для BeginInvoke, поскольку каким-то образом Thread.Join блокирует BeginInvoke в этом потоке...
Как правильно закрыть форму и закрыть рабочий поток?
РЕДАКТИРОВАТЬ:
основной текущий код:
volatile bool abort;
void WorkerThread()
{
while(!abort)DoStuffIncludingInvokesOnThisForm();
}
void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
abort = true;
workerThread.Join();//will deadlock with DoStuffIncludingInvokesOnThisForm
//if get here before workerThread has exited, invokes will fail if workerthread is still in DoStuffIncludingInvokesOnThisForm
}