问题标签 [thread-abort]

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 投票
2 回答
1579 浏览

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

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

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

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

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

0 投票
1 回答
349 浏览

c# - C# - 中止循环线程

我有线程通过使用 Thread.Sleep 在某个时间间隔循环来显示数据。

我想中止停止此活动,因为当我按下按钮时,将加载一组新数据并希望从一开始就执行相同的活动。

我试着做 Thread.Abort(); 在按钮单击事件上。但它没有抛出 ThreadAbortException。

在做 Thread.Join(); 在 Thread.Abort() 之后;当线程正在执行它应该执行的操作时,它会抛出 ThreadStateException“线程尚未启动”。

0 投票
2 回答
981 浏览

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

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

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

定时器事件:

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

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

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

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

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

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

0 投票
2 回答
419 浏览

task-parallel-library - Guaranteed way to cancel a hanging Task?

I often have to execute code on a separate thread that is long running, blocking, instable and\or has a potential to hang forever. Since the existence of TPL the internet is full of examples that nicely cancel a task with the cancellation token but I never found an example that kills a task that hangs. Code that hangs forever is likely to be expected as soon as you communicate with hardware or call some third party code. A task that hangs cannot check the cancellation token and is doomed to stay alive forever. In critical applications I equip those tasks with alive signals that are sent on regular time intervals. As soon as a hanging task is detected, it is killed and a new instance is started.

The code below shows an example task that calls a long running placeholder method SomeThirdPartyLongOperation() which has the potential to hang forever. The StopTask() first checks if the task is still running an tries to cancel it with the cancellation token. If that doesn’t work, the task hangs and the underlying thread is interrupted\aborted old school style.

Although I’ve been using this construct for some years now, I want to know if there are some potential mistakes in it. I’ve never seen an example of a task that saves the underlying thread or gives it a name to simplify debugging, so I’m a bit unsure if this is the right way to go. Comment on any detail is welcome!

0 投票
2 回答
2309 浏览

c# - wcf 服务中的线程中止异常

我有一个托管在 IIS 6.0 上的 WCF 服务(内置于 .NET 框架 3.5)。

代码流程如下

  1. 客户端(这是另一个 Web 服务)调用 WCF 服务
  2. WCF 服务调用一个线程在后台进行处理并立即响应被调用者。
  3. 后台线程完成所有处理后,回调线程。这个调用基本上是一个 HTTPs 请求,因为客户端是一个 Web 服务。

我正在对我的 WCF 服务进行负载测试以定义阈值。观察结果如下:

在 1 分钟内向 WCF 服务发出的 1024 个请求的大约 3 次迭代成功通过。完成每次迭代所需的时间约为 25-30 分钟。然而,从第 4 次迭代中可以看到批量失败。大约 50% 的请求失败,以下例外。

异常线程被中止。

堆栈跟踪

我试图解决此问题的更改如下:

在 web.config 中

在 web.config 中

在 web.config 中

正如 StackOverflow 上的许多人所建议的那样,我已将 App 池的 IdleTimeout 属性设置为 0。

无论在哪里使用溪流,我都会在所有地方处理。所以所有的流都关闭了。

谁能告诉我谁在中止线程以及为什么以及是否有任何方法或工具来追踪线程中止启动的原因?

0 投票
1 回答
509 浏览

ios - 应用程序在启动屏幕上崩溃(在 iPad 10.2 上)

我的应用程序被拒绝,因为在启动屏幕上崩溃说启动时需要很长时间(由看门狗计时器检查)。但是在使用 xcode 运行时,它在我这边运行良好。

连同此 Apple 向我发送一条消息:“在审核期间,您的应用程序无法在连接到 IPv6 网络的 Wi-Fi 上运行 iOS 10.2 的 iPad 上启动。”

我已经在带有 IPv6 网络的 iPad(10.2) 上检查了这个,它工作正常。

我无法理解如何在以下崩溃中找到应用程序崩溃的问题。

这是崩溃报告:

0 投票
0 回答
258 浏览

c# - 线程未中止并等待调度程序调用?

(WPF c# 应用程序)。我有主窗口 UI 线程,我在代码的许多地方使用调度程序调用。从主线程我开始另一个线程。我尝试通过单击取消按钮立即中止线程。在取消按钮上单击我使用 Thread.abort() 来终止线程。但线程不会中止。我观察到调度程序调用正在等待并且 UI 没有响应。我想同步运行线程而不使用 begininvoke ..?

按钮取消事件在 A 类中,我们正在调用线程中止。

Threadx.abort();

当调用线程中止时,我们通过委托从线程调用自定义消息框

自定义消息框调用看起来像这样,属于 A 类

自定义消息框看起来像这样并且在一个单独的类中

0 投票
1 回答
82 浏览

c# - 偶尔的线程中止异常

我从以前的开发人员那里继承了一些代码,该应用程序在执行特定任务时偶尔会出现线程中止异常。

该线程打开一个带有动画加载 gif 的弹出窗口,从服务器下载文件,然后完成。完成后我将 fromflag 设置为 false。我无法设置计时器,因为下载文件可能需要任何时间。

我该如何以不同的方式编写它,这样我就不必使用 th.Abort 并且线程在完成时会自行关闭?

0 投票
5 回答
27531 浏览

c# - .NET Core 等效于 Thread.Abort

背景

我有一个Service抽象。每个服务都有它自己的WorkItem. WorkItem 能够从一些数据开始。该服务正在限制 的执行时间WorkItem。假设单个工作项最多可能需要 60 秒。在此之后,Service应该杀死它。

此代码从 .NET Framework 迁移而来,我创建了一个Thread运行该Start(model)方法的对象。然后代码是这样的:

正在为正在运行的Thread.Abort线程注入异常,导致它立即停止。

现在,我将代码移至 dotnet 核心- 如您所知,当您调用Thread.Abort()您收到以下消息时:

目标

我想将执行时间限制WorkItem为特定的时间量。请注意,如果您运行这样的代码行,此限制也应该起作用:

进步

在 dotnet 核心世界上,它似乎正在走向Task相关的解决方案。所以,我想用CancellationToken. 但它似乎不可能观看“取消”事件并立即停止。我看到的例子是使用while (!canceled)循环,它不能停止长操作(比如Thread.Sleep(1000000).

问题

怎么做才对?

更新

我写了这个示例代码:

这个Main文件:

预期:“结束”不会打印到屏幕上。实际:打印“结束”。有没有可以杀死a的替代方法Task

0 投票
1 回答
293 浏览

c# - 如何正确使用 Thread.Abort()?

线程中止时会导致什么问题?

我需要Thread.Abort()在我的代码中使用,因为线程运行具有大量循环、对象和条件的复杂代码。

我知道Thread.Abort()使用时会导致死锁Monitor,也可以防止资源被释放,但我可以处理这些问题。

我使用IDisposable/using模式或 catchThreadAbortException来保证所有资源都被释放并停止异步操作。

该应用程序现在似乎运行良好。但是,由于代码非常复杂,我不确定在中止线程时是否会出现一些罕见的情况会导致内存泄漏或未处理的异常。

如果线程在执行代码时被中止,是否有任何 .net 类(例如FileStream, )会导致问题?Dictionary还是我应该注意的其他一些问题?