2013-04-05 2 views
1

В моем приложении C# у меня есть отдельное окно, содержащее индикатор выполнения, который запускается в отдельном потоке. Каждые 30 секунд он отправляет запрос на данные с сервера и соответственно заполняет индикатор выполнения.Обнаружение при закрытии потока

Проблема в том, что когда я закрываю основную программу, второе окно с индикатором выполнения остается открытым.

Как я могу запрограммировать второй поток для обнаружения, когда первый поток был закрыт, и соответственно закрыть его?

+0

Есть вторая нить в фоновом режиме? – Yahya

+0

Как насчет ответа на событие закрытия и вручную завершить второй поток? – geniaz1

ответ

0

Вы можете использовать Window_Closed событие из вашего первого окна:

private void Window1_Closed(object sender, EventArgs e) 
{ 
    Window2.Close(); // Close your second window 
} 

, а затем во втором окне:

private void Window2_Closed(object sender, EventArgs e) 
{ 
    // abort all Threads 
    thread.Abort(); 
} 
+0

Закрытие окна не обязательно будет закрывать любые потоки фона. –

+0

@ Энди спасибо. Я использовал событие FormClosed в первой форме, как вы предложили, а затем использовал 'thread.Abort()' - который закрыл второе окно, а также прервал второй поток. –

+0

Также приветствуем переполнение стека, Энди :) –

0

Сделать рабочую нить в фоновом потоке. http://msdn.microsoft.com/en-us/library/h339syd0.aspx

Закрытие дочернего потока от родительского нити не рекомендуется, так как это , скорее всего, предотвращает некоторые ресурсы от быть правильно освобожден.

Смежные вопросы