Начиная новый theard из другого потока и прервите его C # - PullRequest
0 голосов
/ 18 марта 2012

если я что-то сделаю так:

new Thread(DoWork).Start();

void DoWork(){new Thread(DoMoreWork).Start();}

и я прерываю первый поток, который запускает DoWork, DoMoreWork также будет прерван? если нет, то как я могу прервать поток s (DoMoreWork)?

Спасибо!

Обновление:

Проблема в том, что я запускаю скрипт с Microsoft.Scripting, и для этого я запускаю новый поток, который вызывает метод Execute() из Microsot.Scripting, и я хочу иметь возможность прервать скрипт. Я могу прервать поток, но не знаю, какой поток выполнить Create для запуска скрипта.

Ответы [ 2 ]

0 голосов
/ 18 марта 2012
  1. Прерывание «родительского» потока не остановит «дочерний».

  2. Использование Thread.Abort - плохая идея. Вы должны создать свою ветку для изящного выхода: см., например, ответы на этот вопрос .

Если вы спроектировали свои потоки так, чтобы они грациозно выходили (например, когда вы сигнализируете о событии), это также позволит вам уничтожить оба потока.

0 голосов
/ 18 марта 2012

это плохой дизайн ...

вы не должны этого делать, потому что, если второй поток зависает, первый не закроется, и ваш GC не очистит ресурсы AKA deadlock

потоки предназначены для параллельной работы и синхронизации не в иерархии.

Там вы можете найти хорошее руководство по .net: http://www.albahari.com/threading/

...