1

我在 ASP.NET 页面中收到“线程被中止”异常。我根本没有使用任何 Response.Redirect/Server.Transfer 方法。有人可以帮我解决这个问题吗?

4

3 回答 3

1

不好的解决方案是使用

Response.Redirect(URL, False)

这将导致响应 Response.End() 当前页面,但是要小心,这可能会导致问题,因为页面的其余部分将被执行,并可能导致登录绕过以及类似的安全和性能问题。

编辑:显然你没有使用 Response.Redirect 并且你不能用 Try Catch 捕获 AbortThreadExecution,这意味着这个答案现在完全没用了:)

尽管要获得答案,您需要学习如何提出问题。您需要提供以下信息:

  • 异常详情
  • 什么时候出现,有什么症状
  • 你有什么尝试但没有奏效
  • 您是否管理隔离问题?
于 2008-12-01T17:12:28.283 回答
1

如果在您的代码执行时 Web 应用程序被关闭或强制重新启动,则可能会发生这种情况。我已经看到当您的 Web 应用程序将文件写入托管它的 Web 目录时会发生这种情况,从而导致重新编译 Web 应用程序。

于 2008-12-01T17:14:25.957 回答
0

错误:线程被中止。在 System.Threading.Thread.AbortInternal() 在 System.Threading.Thread.Abort(Object stateInfo) 在 System.Web.HttpResponse.End()

此错误主要发生在使用 Response.End、Response.Redirect 或 Server.Transfer 时

原因:Response.End 方法结束页面执行并将执行转移到应用程序事件管道中的 Application_EndRequest 事件。Response.End 后面的代码行没有被执行。

此问题出现在 Response.Redirect 和 Server.Transfer 方法中,因为这两种方法都在内部调用 Response.End。

分辨率/解决方案

您可以使用 try-catch 语句来捕获此异常

或者

对于 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); 如果您使用此解决方法,将执行 Response.Redirect 之后的代码。对于 Server.Transfer,请改用 Server.Execute 方法。

于 2012-02-22T12:59:06.690 回答