Что произойдет, если я оставлю поток в пользовательском контроле в .Net - PullRequest
0 голосов
/ 17 декабря 2010

Допустим, я создал поток из элемента управления для отслеживания изменений в файле и уведомляю пользователя, когда это происходит. Если форма закрыта, и, следовательно, мой контроль скрыт, что будет с этим потоком? Будет ли это работать вечно? Это как-то привязано к контролю и собирать мусор вместе с контролем? Если элемент управления является сборщиком мусора и поток продолжает работать, это приведет к ошибке в приложении?

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

Ответы [ 2 ]

2 голосов
/ 17 декабря 2010

Это действительно зависит от типа нити.Если это Background Thread, он умрет, как только умрет Main Thread.

Если это не Background Thread, он останется в живых.Ваш пользовательский интерфейс будет закрыт, но вы все равно сможете увидеть вас exe в Task Manager.Вы сможете убить его оттуда.

Вы можете пометить ваш поток как Background, используя его свойство IsBackground.Вы должны сделать это, прежде чем начать свою тему.

Пример:

Thread thread = new Thread(DoWork);
thread.IsBackground = true;
thread.Start();
1 голос
/ 17 декабря 2010

Приложение VB.NET закрывается не полностью и прочитайте ответ Павла Минаева и следующие комментарии.

А в FormClosing даже вашей Формы добавьте этот код, чтобы прервать вашу ветку.

yourThreadname.Abort

...