Как проверить, закончил ли Поток выполнение

У меня есть следующая проблема:

Я хочу проверить (C#), если поток закончил выполнение, т.е. если метод потока возвратился. Что я делаю теперь вызов Thread.Join(1), но это дает задержку на 1 мс. Есть ли любой способ просто проверить, закончился ли поток. Осмотр Thread.ThreadState просто кажется слишком громоздким.

33
задан participant 24 February 2015 в 14:25
поделиться

5 ответов

Используйте флаг Thread.IsAlive . Это должно дать статус потока.

59
ответ дан 27 November 2019 в 17:40
поделиться

Это зависит от того, как вы хотите его использовать. Использование соединения - это один из способов. Другой способ сделать это - позволить потоку уведомить вызывающего потока с помощью события.Например, если у вас есть поток графического пользовательского интерфейса (GUI), который вызывает процесс, который выполняется в течение некоторого времени и которому необходимо обновить графический интерфейс после его завершения, вы можете использовать событие для этого. Этот веб-сайт дает вам представление о том, как работать с событиями:

http://msdn.microsoft.com/en-us/library/aa645739%28VS.71%29.aspx

Помните, что это приведет к многопоточность операций, и в случае, если вы хотите обновить графический интерфейс из другого потока, вам придется использовать метод Invoke элемента управления, который вы хотите обновить.

0
ответ дан 27 November 2019 в 17:40
поделиться

Используйте Thread.Join(TimeSpan.Zero) Он не будет блокировать вызывающую сторону и вернет значение, показывающее, завершил ли поток свою работу. Кстати, это стандартный способ тестирования всех классов WaitHandle.

7
ответ дан 27 November 2019 в 17:40
поделиться

Вы можете вызвать событие из вашего потока, когда он завершается, и подписаться на него.

В качестве альтернативы вы можете вызвать Thread.Join() без аргументов:

Блокирует вызывающий поток до завершения потока, продолжая выполнять стандартные COM и SendMessage подкачки.

Thread.Join(1) будет:

Блокирует вызывающий поток до завершения потока или истечения указанного времени, продолжая выполнять стандартные COM и SendMessage подкачки.

В данном случае указанное время равно 1 миллисекунде.

10
ответ дан 27 November 2019 в 17:40
поделиться

Для потока есть свойство myThread.IsAlive. Оно равно false, если метод потока вернулся или поток был прерван.

10
ответ дан 27 November 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: