Возможно, рабочий поток все еще работает. Чтобы убедиться, что поток остановлен, используйте события для подачи сигнала. Вы можете сообщить о событии, чтобы убить поток, когда пользователь нажимает кнопку закрытия в диалоговом окне.
Вы можете проверить, сигнализируется ли событие в вашем сложном расчете (может быть цикл), и отказаться от него. Таким образом остановка потока без проблем.
while(true)
{
//Some complex task
DWORD dwWaitResult;
dwWaitResult = WaitForSingleObject(hwndShutdownEvent,0);
if (WAIT_OBJECT_0 == dwWaitResult)
{
break;
}
}