当前位置: 首页 > news >正文

建站代理免费快速网站

建站代理,免费快速网站,叮当网站做app,优秀的网站建设阅读目录 一、什么时候用Thread.Abort();二、Thread.Abort的用法三、无法终止线程的情形四、Catch块中抛出异常五、Finally块中抛出异常六、Abort调用的时间先交代下背景#xff0c;写《C#多线程之旅》这个系列文章主要是因为以下几个原因#xff1a;1.多线程在C/S和B/S架构中… 阅读目录 一、什么时候用Thread.Abort();二、Thread.Abort的用法三、无法终止线程的情形四、Catch块中抛出异常五、Finally块中抛出异常六、Abort调用的时间先交代下背景写《C#多线程之旅》这个系列文章主要是因为以下几个原因1.多线程在C/S和B/S架构中用得是非常多的;2.而且多线程的使用是非常复杂的如果没有用好容易造成很多问题。 回到顶部 一、什么时候用Thread.Abort(); 当我们想要立即终止一个线程时可以用调用Thread.Abort方法来终止线程。这个和协作式取消不一样。 终止当前线程时会在当前线程上引发ThreadAbortException 异常。ThreadAbortExcetion是一个可以被应用程序捕获的特殊异常在catch 块中会自动重新抛出这个异常除非在catch块中调用ResetAbort方法。ResetAbort方法可以取消掉终止的请求而且可以防止catch中再次抛出的ThreadAbortException终止当前线程。未执行的Finally块会在线程终止前执行。 回到顶部 二、Thread.Abort的用法 例子 名称 代码 计算限制的 操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 public class ThreadWork {     public static void DoWork()     {         try         {             for (int i 0; i 100; i)             {                 Tool.WriteMessage(Thread - working., ConsoleColor.Green, ConsoleColor.White);                 Thread.Sleep(1000);             }         }         catch (ThreadAbortException e)         {             Tool.WriteMessage(Thread - Caught ThreadAbortException - resetting., ConsoleColor.Green, ConsoleColor.White);             Tool.WriteMessage(Thread - Exception message:   e.Message, ConsoleColor.Red, ConsoleColor.White);                           /*--如果调用Thread.ResetAbort()-----             1.取消终止线程的请求并恢复线程继续执行ResetAbort后面的语句然后执行catch块之后的语句             2.若Catch块之后有Finally块则执行Finally块然后执行Finally块后面的语句。             */             /*----如果没有调用Thread.ResetAbort()----             1.finally块在线程终止前执行finally块之后的语句不会被执行然后线程终止。             */             //Thread.ResetAbort();             //Tool.WriteMessage(Thread - ResetAbort, ConsoleColor.Green, ConsoleColor.White);         }         finally         {             Tool.WriteMessage(Thread - Finally blocks were executed., ConsoleColor.Green, ConsoleColor.White);         }         Tool.WriteMessage(Thread - still alive and working., ConsoleColor.Green, ConsoleColor.White);         Thread.Sleep(1000);         Tool.WriteMessage(Thread - finished working., ConsoleColor.Green, ConsoleColor.White);     } } 主程序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public class ThreadAbortTest {     public static void Main()     {         try         {             ThreadStart myThreadDelegate  new ThreadStart(ThreadWork.DoWork);             Thread myThread  new Thread(myThreadDelegate);             myThread.Start();//启动线程myThread执行DoWork方法             Thread.Sleep(100);             Tool.WriteMessage(Main - aborting my thread., ConsoleColor.Blue, ConsoleColor.White);             myThread.Abort();//终止线程myThread             myThread.Join();//等待线程myThread结束             Tool.WriteMessage(Main - ending., ConsoleColor.White, ConsoleColor.White);         }         catch(Exception ex)         {             throw ex;         }         Console.ReadKey();     } } 工具类 1 2 3 4 5 6 7 8 9 public static class Tool {     public static void WriteMessage(string message, ConsoleColor writeColor ,ConsoleColor backColor)     {         Console.ForegroundColor writeColor;         Console.WriteLine(message);         Console.ForegroundColor backColor;     } }   1调用Thread.Abort()的输出结果   2未调用Thread.Abort()输出结果   3流程 1当主线程调用myThread.Abort()后线程myThread抛出异常线程myThread捕获到异常 2在myThread catch块中 如果调用Thread.ResetAbort()-----      Step1.取消终止线程的请求并恢复线程继续执行ResetAbort后面的语句然后执行catch块之后的语句      Step2.若catch块之后有Finally块则执行执行Finally块然后执行Finally块后面的语句。  如果没有调用Thread.ResetAbort()----       1.finally块在线程终止前执行finally块之后的语句不会被执行然后线程终止。 回到顶部 三、无法终止线程的情形 当调用线程的Abort方法时不能保证线程立即终止有可能永远不能终止。这种情形发生在catch或finally块中存在长时间或无限的耗时操作时。 只有当catch或finally块中代码执行完才能终止线程。所以我们可以调用线程的Join方法来等待线程的完成或终止。 回到顶部 四、Catch块中抛出异常 应用程序将会被终止Finally块不会被执行 回到顶部 五、Finally块中抛出异常 应用程序将会被终止 回到顶部 六、Abort调用的时间 (1)线程Start之前调用Abort 线程会在Start被调用时终止线程。 (2)线程Sleeping的时候调用Abort 线程被中断然后终止线程 (3)线程Blocked的时候调用Abort 线程被中断然后终止线程 (4)线程被挂起的时候调用Abort Throw ThreadStartException 引发Abort的调用然后AbortRequested 被加到正在被终止的线程的ThreadState属性 (5)一个托管线程正在执行非托管代码时调用Abort ThreadAbortException不会被抛出直到线程返回托管代码。 (6)如果同时Abort两个线程有可能一个线程会设置状态信息而另外一个线程执行Abort的方法。然而应用程序不会检测到这种情形。 作  者 Jackson0714  出  处http://www.cnblogs.com/jackson0714/  关于作者专注于微软平台的项目开发。如有问题或建议请多多赐教  版权声明本文版权归作者和博客园共有欢迎转载但未经作者同意必须保留此段声明且在文章页面明显位置给出原文链接。  特此声明所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误共同进步。或者直接私信我  声援博主如果您觉得文章对您有帮助可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力
http://www.pierceye.com/news/68717/

相关文章:

  • 苏宁易购网站建设目标北京网站设计公司yy成都柚米科技15
  • 网站开发 成都响应式网站设计布局
  • 网站制作案例 立邦网站定制公司排行榜
  • 社区类网站建设如何写网站优化方案
  • 做旅游网站的好处龙岗高端网站设计专家
  • 做微信的网站叫什么米电子商务网站开发的形式有
  • 犀牛云做网站做网站需要多钱网站验收指标
  • 网站的支付系统怎么做wordpress grid
  • 王色网站自己做副业可以抢哪个网站
  • 营销网站科技ftp是专门提供文件传输的网站
  • 查建设标准网站北京pk10网站开发
  • 免费php模板网站邢台做网站
  • 今科网站建设费用建站好的公司
  • 国外网站app重庆妇科医院排名前十
  • 做贸易要看什么网站潍坊网站建设招聘
  • 京东网站建设流程和结构图宿迁做网站公司哪家好
  • 企业营销网站建设的基本步骤淘客网站做弹窗广告
  • 乌海做网站的公司长沙网站公司哪家好
  • 聊城做网站的公司信息视频拍摄团队
  • 企业手机网站设计软文公司代写
  • 微信公众平台官方网站登录外贸soho怎么建网站
  • 建设网站公司那里好傻瓜网站开发软件
  • 互联网公司网站建设服务平台网站设计
  • 网站流量显示wordpress调试主题
  • 家用电脑可以做网站服务器晋中网站设计
  • 微网站如何建立更改wordpress主题语言包
  • 南通企业自助建站系统行程卡微信小程序入口
  • 装饰公司网站制作广东新闻发布会
  • 网站初期建设的成本来源互联网网站开发有哪些职位
  • 找人做的网站怎么运行东莞网网站公司简介