问题标签 [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 投票
1 回答
10673 浏览

c# - Try/Catch 未在 ReportDocument.ExportToHttpResponse 中捕获 System.Threading.ThreadAbortException

我正在尝试使用ExportToHttpResponse如下方式导出 Crystal ReportDocument:

当我第一次尝试运行它时,我收到了一个System.Threading.ThreadAbortException. 在阅读了 this question 中的已知错误后ExportToHttpResponse尝试实施建议的解决方法,将语句包装在 try/catch 块中,如下所示:

据我了解,这应该捕获并忽略错误,然后继续。但是,我仍然得到System.Threading.ThreadAbortException了 catch 语句的右括号。我的问题是为什么即使我显然已经捕获了异常仍然会收到异常,我该如何修复它以便忽略异常?

0 投票
1 回答
233 浏览

c# - Thread executing remote connection won't abort

I'm designing a small program whose objective is to make sure one of our server is up and running. In some cases, the server won't answer and a script must be launched to restart the server.

First I'm starting a new thread responsible of fetching the information, which is then joined by the main thread for a certain time span. I then abort the thread to disconnect and finally join it to leave enough time to execute the catch and finally blocks.

In theory it should work great : if the time span is short enough, it indeed indicates that the server is down (because no connection could be made in the short allocated timespan). But in certain cases, when the server is really down, the program will just keep executing, as if the ThreadAbortException had no effect. Problem is, these downtimes are quite sporadic so I couldn't debug it myself to see what was not working properly.

Here's how it goes :

This here is the main thread, calling the worker thread. Very straightforward.

And here's the called thread :

Variables such as Commands, serviceProgID, etc. have been declared elsewhere and are known to work well. I guess my problem spans from the three lines following the stopwatch declaration/initialization. First, I must say I copy pasted these lines from a similar application, but basically it should only fetch a result from the given Command. Unfortunately, because I couldn't debug under the critical situation, I don't which line is problematic, but anyway, it seems the ThreadAbortException has no effect. Is it because code has been switched off to unmanaged?

I'm lost here so any idea would be welcomed! Thanks!

0 投票
1 回答
155 浏览

.net - 窗体关闭时可以调用 thread.Abort() 吗?如果不是,那么全球标志是否足够好?

首先, Thread.Abort() 是邪恶的——明白了!现在让我解释一下我的情况...

情况:

我有一个只向用户显示当前运行状态的仪表板。它针对 Sql Server DB 执行各种选择查询,并执行一些最终在仪表板上显示给用户的计算。用户可以同时打开多个仪表板。我有一个计时器线程,每隔几秒钟刷新一次仪表板。该计时器线程产生另一个线程(实际上队列在线程池上工作)以执行长时间运行的计算/查询。

问题:

当用户点击 X 关闭 Dashboard 窗口时,它需要立即关闭(比如说在一秒钟内,我认为 2 秒太长了)。所以我使用这段代码:

问题是有时会捕获 ThreadAbortException,有时则不会。我发现在执行查询的过程中它几乎没有被捕获。

[更新]我最近发现如果我检查内部异常,我可以捕获 ThreadAbortException。

问题:

  1. 在这种情况下可以使用 Thread.Abort() 吗?如果是这样,我如何始终捕获 ThreadAbortException 以便用户在关闭表单时看不到它?(根据我的阅读,我认为这是不可能的)
  2. 如果不能使用 Thread.Abort() (这是我认为你们大多数人会回答的),那么这是我对使用“全局布尔标志”来告诉线程何时关闭的其他担忧。
    • 我担心线程不会在 1 秒的时间限制内停止。(例如,我可能有一些查询需要 1-2 秒才能运行)
    • 我将不得不用 if(shouldShutdown) 语句来弄乱我的代码。
    • 我应该将 shouldShutdown 标志设为静态,以便我的所有课程都可以使用它吗?如果用户可以同时打开多个仪表板,这会带来问题吗?(我担心在所有仪表板之间共享静态变量。这是我绝对不想要的。)
    • 当工作线程看到他们必须关闭时,他们应该抛出异常还是直接返回?如果它们只是返回,那么我将不得不添加更多 if(shouldShutdown) 检查,因为某些函数返回 false 是可以的。如果抛出异常是可以的,你推荐哪个异常?定制的?

谢谢

0 投票
1 回答
7071 浏览

.net - LegacyUnhandledExceptionPolicy 不允许捕获(并吞下)ThreadAbortException?

我正在使用 .NET 1.1 兼容模式进行未处理的异常处理。问题是当 LegacyUnhandledExceptionPolicy 设置为“1”(这是我想要的)时,我无法捕获和吞下 ThreadAbortException。

示例代码:

应用程序配置:

代码:

当遗留异常处理为“0”(关闭)时,上面的代码会像预期的那样安静地吞下 ThreadAbortException。

但是,当遗留异常处理为“1”时,上面的代码将 ThreadAbortException 打印到控制台,这不是我所期望的。

有任何想法吗?

谢谢。

0 投票
2 回答
3575 浏览

c++ - 错误:终止调用抛出异常中止陷阱:6

我正在制作一个处理继承的烫手山芋游戏。我有土豆班、球员班和裁判班。

在我的裁判类中调用 toss 函数时,我一直收到同样的错误,我似乎无法弄清楚为什么:终止调用抛出异常中止陷阱:6

我通过并发现在 umpire::start() 中,我的 for 循环中对 Players.at(randU)->toss(*m) 的调用导致出现此错误。但在我看来一切都很好。

谁能帮我吗?谢谢!

裁判.cc

播放器.cc

主.cc

另请注意:PRNG.h 是一个生成随机数的类。所以 PRNG prng1; int rand=prng1(#) 生成一个介于 0 和 # 之间的随机数。

另外: 当我调用我的 toss 函数时,问题就出现了。我没有超出范围,因为当我尝试调用 Players.at(randU)->getID() 时,我根本没有收到任何错误。难道是我无法达到那个玩家的投掷功能吗?我认为这与我指向的东西或记忆有关。我首先在我的 main.cc 中创建一个 PlayerList 播放器,并在两者之间交替使用 push_back 播放器。但是每个玩家也需要一份名单。也许我遇到了与此有关的错误?

谢谢!任何帮助深表感谢 :)

0 投票
0 回答
1544 浏览

c# - 反序列化期间线程被中止错误(但没有中止)

非常奇怪的错误,基本上,一旦用户登录我的应用程序,我就会启动一个线程,该应用程序使用以下代码片段从 xml 文件加载数据:

它正在加载的 XML 文件大约 3MB,如果这很重要的话。每次它在一个特定文件上失败,但有以下例外:

反序列化'C:\bin\Debug\Settings\Objects.xml':System.Threading.ThreadAbortException:线程被中止。

在 System.RuntimeMethodHandle.InvokeMethod(对象目标,对象 [] 参数,签名 sig,布尔构造函数)

在 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(对象 obj,对象 [] 参数,对象 [] 参数)

在 System.Reflection.RuntimeMethodInfo.Invoke(对象 obj,BindingFlags invokeAttr,Binder binder,Object[] 参数,CultureInfo 文化)在 System.Xml.Serialization.TempAssembly.InvokeReader(XmlMapping 映射,XmlReader xmlReader,XmlDeserializationEvents 事件,字符串 encodingStyle) System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader,字符串 encodingStyle,XmlDeserializationEvents 事件)在 System.Xml.Serialization.XmlSerializer.Deserialize(流流)

在 c:\Classes\XmlSerializer.cs:line 82 中的 Classes.XmlSerializer.Deserialize[T](String Path) 无法加载以前的数据!System.Threading.ThreadAbortException:线程被中止。

在 Classes.XmlSerializer.Deserialize[T](String Path) in c:\Classes\XmlSerializer.cs:line 96 at Controllers.ObjectDataCollection.ObjectThread.LoadData() in c:\Controllers\ObjectDataCollection.cs:line 74

对于如何进一步调试,我完全不知所措。我知道线程没有被中止,因为尝试反序列化后的下一行是一个扫描事物的循环,它运行得非常好(线程没有重新启动,它只是在一个地方启动)。

有人对我如何进一步调试有任何想法吗?我在这里完全不知所措。这是所有代码: http: //pastebin.com/F30vD9KL

0 投票
1 回答
1365 浏览

c# - 使用 async-await 时,Moq.Verify 中的 ThreadAborted

我的测试方法。我正在使用 xUnit

这一行总是抛出 ThreadAborted 异常。

但是当我调试测试时 - 它会正常运行。我的事情是线程没有完全完成返回结果,但我使用等待!

输出窗口:

0 投票
1 回答
359 浏览

c# - 使用 Response.End() 的成本

我正在使用以下代码下载文件,但我面对的是Response.End总是导致Exception. 这是我的应用程序行为的成本吗?如果是的话,如何获得另一种下载文件的方法。我试图用来Thread.ResetAbort()处理异常,但这会导致不需要的额外数据被添加到文件中

0 投票
0 回答
625 浏览

asp.net - 在 Response.End ThreadAbortException 之后 ASP.Net 线程会发生什么?

有几个答案解释了Response.End() 被认为有害吗?  但是我还没有找到明确的确认,在 Response.End ThreadAbortException 之后 ASP.Net 线程会发生什么。

Eric Lippert 在对 Response.End () 的评论中没有中止当前线程  指出“线程只是要回到线程池中。”但他承认,他在线程模型上工作的时间超过10年。

在 CodeProject 文章Exploration of methods to handle ThreadAbortException with Response.Redirect 中被告知“当前线程(正在处理当前请求)应该被终止(并返回线程池)”,但后来它是提到 ASP.NET 工作进程可能面临线程饥饿。 

 有人可以提供任何参考来澄清线程吗

  • 被送回游泳池,或
  • 终止并从池中删除?

有类似的(不是 Asp.net 特定的)未回答的问题Aborting a thread-pool thread

顺便说一句,普遍认为 ThreadAbortException 可以被应用程序代码捕获,但在 catch 块的末尾重新抛出(来自MSDN Thread.Abort Method)。然而它是不正确的(至少它并不总是正确的)。我在我们的应用程序中找到了代码,在 Response.End 捕获并“吃掉”ThreadAbortException 之后,处理继续进行,没有任何重新抛出。

.

0 投票
1 回答
625 浏览

asp.net - Response.Redirect 异常会转到 global.asax 吗?

我知道当您调用 Response.Redirect 时,它会触发 ThreadAbortException。一位同事演示了调用 response.redirect,然后转到 global.asax。

对于我的一生,我无法让 ThreadAbortException 转到 global.asax,它就像它在系统中被自然抑制一样。

我问这个的原因是我们认为 response.redirect 是一些自动错误电子邮件的原因,但我不相信这是这种情况,特别是如果我什至无法将它调试到 global.asax 中。

任何想法为什么我不能让 Response.Redirect 触发全局错误处理程序?