在使用线程时,如果线程还未结束直接退出线程很有可能会导致数据丢失。
class threadAbort { static void Main(string[] args) { WriteMessage("主线程开始工作", ConsoleColor.White, ConsoleColor.White); Thread th = new Thread(new ThreadStart(TestTry)); th.Start(); Thread.Sleep(500);//500毫秒后结束线程 th.Abort(); th.Join(); WriteMessage("主线程结束工作" + th.ThreadState.ToString(), ConsoleColor.White, ConsoleColor.White); Console.ReadKey(); } private static void TestTry() { try { for (int i = 0; i < 10; i++) { WriteMessage("线程正在工作中"+i.ToString(), ConsoleColor.Green, ConsoleColor.White); Thread.Sleep(100); } } catch (ThreadAbortException ex) { WriteMessage("线程错误信息:" + ex.Message, ConsoleColor.Red, ConsoleColor.White); } finally { WriteMessage("线程退出。。", ConsoleColor.Blue, ConsoleColor.White); } //如果线程未结束,直接Abort线程,下面语句将不会被执行。 WriteMessage("线程结束工作.", ConsoleColor.Yellow, ConsoleColor.White); } public static void WriteMessage(string message, ConsoleColor writeColor, ConsoleColor backColor) { Console.ForegroundColor = writeColor; Console.WriteLine(message); //Console.BackgroundColor = backColor; } }
Thread.Sleep(500);//500毫秒后结束线程
th.Abort();
在线程启动500毫秒后,关闭线程
WriteMessage("线程结束工作.", ConsoleColor.Yellow, ConsoleColor.White);
将不会被执行
如果注释//th.Abort();