Ну, вместо while(true)
, может быть, вам стоит:
while(appIsRunning)
{
}
И, на заключительном мероприятии для вашей формы,
appIsRunning = false;
thread.Join(2000);
где последняя строка только для того, чтобы убедиться, что вы ожидаете, пока поток не завершит чистое окончание. Есть много других способов навязать конец потоку, но проблема только в этом: вы не хотите, чтобы заставлял вещи, вы хотите, чтобы они происходили настолько естественно, насколько это возможно.
После объединения вы можете проверить состояние потока, чтобы увидеть, завершилось ли оно. Если этого не произойдет, , тогда (и только тогда) принудительно завершит свою работу с прерыванием и, возможно, уведомит вашего пользователя (или запишет запись в журнал), что что-то не закончилось так, как должно.