经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C# » 查看文章
为什么不能用Abort退出线程
来源:cnblogs  作者:永恒921  时间:2018/12/13 9:37:19  对本文有异议

 

在使用线程时,如果线程还未结束直接退出线程很有可能会导致数据丢失。

  1. class threadAbort
  2. {
  3. static void Main(string[] args)
  4. {
  5. WriteMessage("主线程开始工作", ConsoleColor.White, ConsoleColor.White);
  6. Thread th = new Thread(new ThreadStart(TestTry));
  7. th.Start();
  8. Thread.Sleep(500);//500毫秒后结束线程
  9. th.Abort();
  10. th.Join();
  11. WriteMessage("主线程结束工作" + th.ThreadState.ToString(), ConsoleColor.White, ConsoleColor.White);
  12.  
  13. Console.ReadKey();
  14. }
  15.  
  16. private static void TestTry()
  17. {
  18. try
  19. {
  20. for (int i = 0; i < 10; i++)
  21. {
  22. WriteMessage("线程正在工作中"+i.ToString(), ConsoleColor.Green, ConsoleColor.White);
  23. Thread.Sleep(100);
  24. }
  25. }
  26. catch (ThreadAbortException ex)
  27. {
  28. WriteMessage("线程错误信息:" + ex.Message, ConsoleColor.Red, ConsoleColor.White);
  29. }
  30. finally
  31. {
  32. WriteMessage("线程退出。。", ConsoleColor.Blue, ConsoleColor.White);
  33. }
  34.  
  35. //如果线程未结束,直接Abort线程,下面语句将不会被执行。
  36. WriteMessage("线程结束工作.", ConsoleColor.Yellow, ConsoleColor.White);
  37. }
  38.  
  39. public static void WriteMessage(string message, ConsoleColor writeColor, ConsoleColor backColor)
  40. {
  41. Console.ForegroundColor = writeColor;
  42. Console.WriteLine(message);
  43. //Console.BackgroundColor = backColor;
  44. }
  45. }

  

Thread.Sleep(500);//500毫秒后结束线程
th.Abort();

在线程启动500毫秒后,关闭线程

 WriteMessage("线程结束工作.", ConsoleColor.Yellow, ConsoleColor.White);

将不会被执行

 

如果注释//th.Abort();

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号