У меня есть следующее.
public static Thread testThread = new Thread(ThreadStart) {Name = "TestThread", IsBackground = true};
private void Form_Load()
{
testThread.Start()
}
private static void ThreadStart()
{
int count = 0;
try
{
while (true)
{
count++;
}
}
catch (Exception ex)
{
StreamWriter stream = new StreamWriter(File.OpenWrite("Exception.txt"));
stream.WriteLine(count + "\n" + ex);
stream.Flush();
stream.Close();
}
}
Когда я вызываю Thread.Abort()
, я ловлю исключение и записываю в файл. Однако, если я вместо этого закрываю приложение, ничего не пишется. у меня тоже есть
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
Application.ThreadException +=
new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Но похоже, что исключение никогда не выбрасывается.
Я полагаю, добавление вопроса разумно.
Что происходит с работающим фоновым потоком при выходе из родительского процесса? Насколько я понимаю, для выхода из потока выбрасывается исключение ThreadAbortException. Если это так, как можно перехватить ThreadAbortException, чтобы очистить ресурсы, которые могут присутствовать в потоке?
Thread.Abort()
. Убивать треды плохо, м'кей? Лучше убедить их совершить самоубийство, чтобы не попасть в тюрьму. - person CodesInChaos   schedule 06.02.2012