问题标签 [threadabortexception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3638 浏览

c# - ASP.NET 应用程序中的 Thread.Abort 导致 w3wp.exe 崩溃

不要在此问题上设置重复标志- 这不是关于“为什么会发生 ThreadAbortException”,而是关于“为什么 w3wp.exe 进程在 ThreadAbortException 之后终止”。

假设我们有一个带有以下代码示例的简单 Web 应用程序:

这实际上意味着类似(参见Is Response.End() 被认为有害吗?):

在我的机器(Windows 10 Pro + IIS)上,此代码导致 IIS 池进程终止,错误代码为 0x0(不执行重定向)。在其他机器(不是 Windows 10)上,此代码仅生成 ThreadAborted 异常,但进程继续工作(重定向执行)。

有人可以检查这个样本并解释发生了什么吗?

更新 这里有一些与此问题相关的 Windows 事件日志。

日志 #1

发生未处理的异常,进程终止。

应用程序 ID:/LM/W3SVC/1/ROOT/AS

进程号:6700

异常:System.Threading.ThreadAbortException

消息:线程被中止。

StackTrace:在 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) 在 System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags) 在 System.Web.Hosting.PipelineRuntime.ProcessRequestNotification (IntPtr rootedObjectsPointer、IntPtr nativeRequestContext、IntPtr moduleData、Int32 标志)

日志 #2

0 投票
2 回答
5900 浏览

c# - 如何处理线程被中止的异常 vb.net/C#?

我已经看到了几个关于这个问题的问题,但我没有找到适合我的问题的答案。最初我在函数中编写 json 后使用以下代码

变得Server cannot append header after HTTP headers have been sent异常。

所以我将代码更改为

所有这些代码都在函数中(比如说)writeData(),它由一个名为CallWriteData. 现在该异常已在函数中成功处理,但在父函数中WriteData()抛出异常。Thread was being abortedCallWriteData

老实说,这不是我项目中的主要问题,但如果我能解决这个烦人的问题,那就太好了。CallWriteData此外,并非每次都出现此异常 (有时已成功处理)。

0 投票
1 回答
123 浏览

c# - 时间:2019-04-10 标签:c#threading奇怪的ThreadAbortException

我遇到了一个非常奇怪的问题。我敢肯定它的东西很小,但我正在把头发拉出来……

我正在将第三方库集成到我的应用程序中。我下载了这个库,它附带了示例代码。我能够毫无问题地构建和运行示例代码。我将 lib + 示例代码复制到我自己的解决方案文件夹中,而不更改两个项目中的任何内容,将它们添加到我自己的解决方案中,构建并运行。我在示例应用程序结束时收到 ThreadAbortException。这曾经在单独的文件夹中工作?!!!?!

该代码在侦听线程中打开一个套接字连接。线程监视和使用套接字信息。然后在程序退出之前,它会执行一个 runner.Abort() ,其中 runner 是线程。我想不通的是,为什么它没有在其原始解压缩文件夹中抛出 ThreadAbortException 。但是当我完全复制到我自己的解决方案中时它会抛出?

我没有看到任何使用 Thread.ResetAbort()。

在这方面需要一些帮助。提前致谢。

我尝试过:更改 .net 框架版本(无论我如何更改,原始目录都会运行良好,但我自己的解决方案会因 ThreadAbortException 而窒息)

这是在 Visual Studio 2013 社区版上。

感谢您的阅读。

下面编辑***

配置文件是相同的。bin 目录显示生成的 pdb 文件大小不同,但其他文件的大小似乎相同。不起作用的代码具有较小的 pdb 文件。

我删除了 lib 项目和示例项目的原始目录的 bin,从示例项目中删除了引用并从解决方案中重新添加。构建,并且它构建相同的大小(比其他解决方案大)。运行它并在没有 ThreadAbortException 的情况下正常退出。然后我在自己的解决方案下做了同样的事情,它使用更小的 pdb 构建,并且出现了 ThreadAbortException

我还验证了 Visual Studio 的两个实例都是 2013 社区。

0 投票
1 回答
120 浏览

c# - 使用 thread.abort() 方法时是否有任何可能的方法来避免 ThreadAbortException?

我创建了多个线程。它正在做一些大任务。一些之后,我中止了所有线程,但有时它会引发线程异常。我想避免它发生。

0 投票
1 回答
138 浏览

c# - 标签未在 System.Threading.ThreadAbortException 中更新

在我的页面中,我正在尝试下载文件。文件已成功下载,但我得到 System.Threading.ThreadAbortException。所以我在我的 try Catch Block 中处理了这个问题,并将错误标签设置为空白,但它没有在页面中更新。

这是我的写文件功能

有人能告诉我为什么标签没有设置为空白,即使它在我调试代码时位于 system.thread.threadabortexceptiopn 的 Catch 块下?

0 投票
2 回答
1579 浏览

c# - WPF中的线程中止异常

我正在尝试在我的WPF应用程序中实现加载器。在一些繁重的操作中,UI 线程被冻结,所以我不得不使用线程来实现加载器。每次加载程序加载时,都会创建一个新线程,并且当加载程序启动时,该线程会(手动)中止。我面临的问题是,有时应用程序会崩溃并给出ThreadAbortException.

这是启动加载程序的代码:

此代码用于停止加载程序:

我无法在我的 catch 块中捕获此异常。也许是因为它在不同的线程上。我想知道如何避免 ThreadAbortException

0 投票
0 回答
172 浏览

asp.net-mvc - 为什么我的 ThreadAbortException 与 C# 6 的行为不同?

我有一个在授权期间使用 Response.Redirect 的 ASP.NET MVC (5.2.3) 应用程序(我知道这很糟糕,我打算解决这个问题,但请幽默我的问题)。我们知道这会抛出一个,但在 IIS 需要处理异常之前ThreadAbortException,管道会捕获(并且可能是s)这个。ResetAbort()

将我的构建服务器更改为使用 VS2015 版本的 MSBuild(而不是 2013 版本)构建后,不再处理这些异常,并且在调用 5 个 Response.Redirect 实例后我的 appdomain 关闭(根据 appdomain 设置 - 5 个未处理5 分钟内出现异常 == 禁用应用程序池)。

我不明白为什么简单地更改编译器版本会改变运行时的行为,从而不再处理 ThreadAbortExceptions。我没有更改 .net 框架版本 - 它保持在 4.5。

我有许多解决方案可以尝试(升级框架版本,不要调用重定向等),但我很难弄清楚这实际上是如何发生的。

0 投票
0 回答
736 浏览

c# - webRequest.GetResponse() 抛出 ThreadAbortException

我正在运行一个同步作业,它将数据同步到一个 api,我每天都会收到几次 ThreadAbortException,我不知道为什么。代码看起来像这样。

这是抛出的异常:

System.Threading.ThreadAbortException: Thread was being aborted.
 at System.Net.ConnectStream.WriteHeaders(Boolean async)
 at System.Net.HttpWebRequest.EndSubmitRequest()
 at System.Net.HttpWebRequest.CheckDeferredCallDone(ConnectStream stream)
 at System.Net.HttpWebRequest.GetResponse()

我搜索了一下,大多数答案似乎都围绕着这个错误: https: //support.microsoft.com/en-us/kb/312629

错误的原因可能是什么,我应该如何避免或处理它?

0 投票
1 回答
438 浏览

c# - 单元测试遗留代码以某种方式对 ThreadAbortException 做出反应

我有一些想要测试的遗留代码。以下是要点的复制:

现在,这个遗留单元有一些问题,但现在我只是想对其进行测试。具体来说,我想测试collaborator.DoOtherStuff如果提出一个.Response.End()ThreadAbort

问题:你如何提出这样的异常?

我已经阅读了这个问题及其答案ThreadAbortException,并了解它很特别。但是,我从那些帖子中看不到如何在单元测试中处理这个问题。

这是我的尝试:

显然编译器抱怨:ThreadAbortException没有可用的构造函数。此外,它sealed(可能有充分的理由),所以创建一个“可测试的”子类是行不通的。

测试此类代码的正确方法是什么?它甚至是可行的,还是LegacyUnit测试太不友好了?


完整、最小的复制(带有 NUnit 2.6.4 和 Moq 4.5.9 的空 .NET 4.5 类库):

0 投票
2 回答
981 浏览

c# - 从定时器事件中止线程

如果需要太多时间,我有一个Timer必须取消的。Thread

启动Thread方法时,我启动Timer并将当前线程作为参数传递给事件。

定时器事件:

但是这个Abort电话给我抛出了一个异常:

'无法评估表达式,因为代码已优化或本机框架位于调用堆栈顶部'

并且线程仍然活着。如果我在 之前启动计时器startJob()并直接传递线程它工作正常。

问题:为什么Thread.CurrentThread版本不工作?是因为我还必须中止计时器线程吗?我在这里想念什么?

我发现这个例外的答案来自不同的上下文,并不能真正帮助我理解为什么。

编辑:我知道这是中止或取消线程的错误方法。它应该做的工作是打开一个 SerialPort。但是每隔约 200 次,线程就永远不会返回,我需要杀死它,不管后果。模拟while循环可能是一个不好的例子。