900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > C#多线程开发-处理子线程中的异常

C#多线程开发-处理子线程中的异常

时间:2019-04-23 15:38:46

相关推荐

C#多线程开发-处理子线程中的异常

C#多线程开发-处理子线程中的异常

在平时的多线程开发中,对于异常的处理是至关重要的,千万不能马虎。如果在实际的项目中,对于某些线程中的异常没有处理,会直接导致整个程序崩溃,软件无法使用。

其中需要说明的是,在子线程中产生的异常是无法在主线程被捕获到,也就是你即使在使用线程方法外有try/catch也无济于事,线程中的异常只能在线程中捕获并处理。

比如下面的例子,可以看到在创建线程的代码是在try/catch中的,按照常理来说,如果子线程中有异常发生那么外部的try/catch是可以正常收到异常通知的。

staticvoidMain(string[]args){try{ThreadtempThread=newThread(Test);tempThread.Start();}catch(Exceptionex){Console.WriteLine(""+ex.Message);}}privatestaticvoidTest(){Thread.Sleep(100);for(inti=0;i<100;i++){Console.WriteLine(""+i);if(i==10){thrownewException("触发异常"+i);}}}

运行上面的代码,可以看到程序无法在外部通过try/catch方法接收到异常,运行后软件会直接异常到子线程中,无法把异常再次往出抛。以后我们在使用线程/异步(也是一种特殊的线程)时要特别的留心。

然而正确的做法是在子线程中捕获并处理异常。把程序进行修改,下面就可以正确捕获到异常信息。

privatestaticvoidTest(){Thread.Sleep(100);try{for(inti=0;i<100;i++){Console.WriteLine(""+i);if(i==10){thrownewException("触发异常"+i);}}}catch(Exceptionex){Console.WriteLine("捕获的子线程中的异常信息:"+ex.Message);}}

看下面图片,程序就在子线程中捕获到了异常信息。

小寄语

人生短暂,我不想去追求自己看不见的,我只想抓住我能看的见的。

原创不易,给个关注。

我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。