CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

关于多线程异常处理

楼主rib06(诸刃突袭·掌上的明珠)2006-03-10 08:34:20 在 .NET技术 / C# 提问

工作线程中如果抛出异常,那么这个异常在线程中是catch不到的,具体代码如下:  
   
  '工作线程中  
  Public   Sub   Action()  
  ...  
  Dim   httpReq   As   HttpWebRequest  
  httpReq   =   CType(WebRequest.Create(strURL),   HttpWebRequest)  
  Try  
          httpResp   =   CType(httpReq.GetResponse(),   HttpWebResponse)  
  Catch   ex   As   Exception  
          '   处理该异常  
  ...  
  End   Sub  
   
  在getResponse()这里如果出现超时,则应该引发一个“操作超时”的异常,但是这个异常在工作线程中catch不到。按照一些文章的说法,我通过给Application.ThreadingException添加了一个Handler,使得这个异常可以抓到并处理了,代码如下:  
   
  '主线程中  
  ...  
  '全局异常处理程序  
  Public   Shared   Sub   MainThreadExceptionHandler(ByVal   sender   As   Object,   ByVal   ex   As   ThreadExceptionEventArgs)  
          MessageBox.Show("应用程序发生了如下的异常信息"   +   ":"   +   ex.Exception.Message)  
  End   Sub  
   
  Public   Shared   Sub   MainThreadExceptionHandler(ByVal   ex   As   Exception)  
          MainThreadExceptionHandler(Nothing,   New   ThreadExceptionEventArgs(ex))  
  End   Sub  
   
  Public   Shared   Sub   WorkerThreadExceptionHandler(ByRef   eX   As   Exception)  
  '   通知全局异常处理程序  
          MainThreadExceptionHandler(Nothing,   New   System.Threading.ThreadExceptionEventArgs(eX))  
  End   Sub  
   
  ...  
  Public   Sub   myStartThreadMethod()  
        '在我启动线程的代码之前  
        AddHandler   Application.ThreadException,   AddressOf   MainThreadExceptionHandler  
         
        '开启工作线程的Action()  
        ...  
  End   Sub  
   
   
  '''''''''''''''''''''''''  
  '   工作线程代码片段  
  Public   Delegate   Sub   WorkerThreadExceptionHandlerDelegate(ByRef   ex   As   Exception)  
  Public   Sub   Action()  
  ...  
  Dim   httpReq   As   HttpWebRequest  
  httpReq   =   CType(WebRequest.Create(strURL),   HttpWebRequest)  
  Try  
          httpResp   =   CType(httpReq.GetResponse(),   HttpWebResponse)  
  Catch   ex   As   Exception  
          Dim   myD1   As   New   WorkerThreadExceptionHandlerDelegate(AddressOf   myMainThread.WorkerThreadExceptionHandler)  
          myD1.BeginInvoke(ex3,   Nothing,   Nothing)  
  ...  
  End   Sub  
   
  整个代码完成的功能就是开多个工作线程,采用同步方式分别对strURL地址发送http请求并等待响应,改进后的代码已经可以捕捉到“操作超时”的异常了,但是,捉到这个异常的同时却又出现了一个新的异常:  
   
  最有可能的“System.ObjectDisposedException”类型的异常出现在   system.dll   中  
  其他信息:   无法访问名为“System.Net.Sockets.NetworkStream”的已处置对象。  
   
  这个异常我是怎么也捉不到了,而且不知道是从哪抛出的,请大家帮忙看看是怎么回事吧,谢啦!  
   
  p.s.代码没有翻译成c#的,不好意思,急啊 问题点数:20、回复次数:3Top

1 楼Knight94(愚翁)回复于 2006-03-10 08:43:39 得分 20

you   have   a   try   as   follows:  
   
  try  
        //your   code  
  catch   ex   As   Exception   //define   exception   type  
        //first   exception-handle  
  catch   //don't   define  
        //second   exception-handle  
  endTop

2 楼rib06(诸刃突袭·掌上的明珠)回复于 2006-03-10 08:53:32 得分 0

tks!  
   
  Let   me   have   a   tryTop

3 楼rib06(诸刃突袭·掌上的明珠)回复于 2006-03-18 17:31:56 得分 0

呵呵,能不能抓到这个异常看来现在已经不重要了,重要的是要能及时终止线程,即使抛出了异常,那么没有什么。  
   
  再次感谢Knight94,现在星级人物越来越多了啊,惭愧惭愧;   )Top

相关问题

  • Pro *C编程,多线程处理
  • PRO*C多线程处理问题
  • 多线程内在处理问题
  • 300分求 多线程处理问题!?
  • 多线程问题处理。请教
  • 多线程处理socket通讯带来的问题!!!!!
  • 多线程只有在多处理机上才有效,对?
  • 在pb中如何实现多线程处理
  • 请教一个在多线程下的数据处理问题?
  • 关于多线程处理---难道又是编译器问题?

关键词

  • .net
  • 线程
  • 代码
  • mainthreadexceptionhandler
  • threadexceptioneventargs
  • 处理
  • 异常
  • 抛出
  • sub
  • 工作线程

得分解答快速导航

  • 帖主:rib06
  • Knight94

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo