在 mscorlib.dll 中发生了一种名为“System.Threading.ThreadAbortException”的首次机会异常。

19

我正在开发一个asp.net应用程序,当我尝试编译和运行该应用程序时,它可以成功运行。

但是当我尝试调试该应用程序时,它会在任何点上出现错误-

第一次机会异常类型“System.Threading.ThreadAbortException”发生在mscorlib.dll中

它不会在任何特定的代码行处报错,而是在任何代码行处(不确定)报错,然后网页显示“服务器应用程序不可用”错误。

即使我尝试在即时窗口/快速查看中解析/执行某些语句,它也会给我以上错误。

例如,我在XElement中加载了一个xml文档(超过10000行),并尝试通过xpath检查某些属性值,如XElementObj.XPathSelectElement(“/asdf/asd/wqer/xyz”),它会出现以上错误(不是每次都出现,而是随机出现)。

如果有人对此有任何想法,请帮忙解决。


我不确定这与“第一次机会异常”有任何关系 - 第一次机会异常是已捕获和处理的异常,保持了工作流的完整性。 - Aviad P.
2个回答

33

我有类似的问题,并在另一个问题中找到了这个答案:

如果您想定位异常发生的位置,可以选择Debug→Exceptions菜单项,在出现的对话框中,选中“Common Language Runtime Exceptions”的第一个复选框。这将使调试器在异常发生时立即中断,而不仅仅是在未处理的异常上中断。

这也是为什么通常捕获通用异常是一个坏主意,除非您清楚地记录所捕获信息的原因之一。


天哪,我又忘记了多少次啊... 再次感谢你提醒我! 我不太喜欢这个新的“把一切都扔过去”的方法 :-) 太多异常了,伙计... - Xan-Kun Clark-Davis

12
我在我的asp.net应用程序中遇到了这个异常,然后在这个论坛帖子中找到了以下内容:

问题:如果您使用Response.End、Response.Redirect或Server.Transfer,则会出现ThreadAbortException http://support.microsoft.com/default.aspx?scid=kb;en-us;312629

这是有道理的,因为我正在重定向到一个页面,在任何东西被呈现之前(顺便说一下,这是预期的行为)

微软提供的抑制所有异常的解决方法:

要解决此问题,请使用以下方法之一:

  • 对于Response.End,请调用HttpContext.Current.ApplicationInstance.CompleteRequest方法,而不是Response.End,以绕过代码执行到Application_EndRequest事件。

  • 对于Response.Redirect,请使用重载Response.Redirect(String url, bool endResponse)并将endResponse参数传递为false,以抑制对Response.End的内部调用。例如:Response.Redirect ("nextpage.aspx", false);

  • 对于Server.Transfer,请改用Server.Execute方法。

如果使用此解决方法,则会执行跟随Response.Redirect的代码。对于Server.Transfer,请改用Server.Execute方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接