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

python - 如何在 Python 中实现 Thread.ResetAbort 方法

在 Python 中实现了一个Thread.abort方法后,我注意到一个Thread.reset_abort方法也可能有用。两者都受到ThreadC# 中的对象的启发。虽然创建一个可以自动重新引发自身的异常尚未解决,但取消计划的异常可能仍然有帮助。

如何在处理程序后自动重新引发异常的问题已经被要求解决问题 X,但这个问题是关于问题 Y。如果一个线程被安排引发异常,它仍然可以取消它。但是,PyThreadState_GetAsyncExcPython 的 API 中没有查看是否设置了异常的函数。

这是到目前为止在其他线程中引发异常的代码:

目标是取消在线程上引发的异常。如果有可能在处理后自动重新引发异常,那么能够取消其自动投掷能力也将有所帮助。目前,这些功能均不可用。

0 投票
2 回答
156 浏览

c# - 静态构造函数是否作为 CER 运行?

我正在测试以下代码:

我得到的输出是:

似乎t.Abort()调用阻塞了主线程,直到静态构造函数的执行完成,并且根据文档

Abort如果正在中止的线程位于代码的受保护区域(例如 catch 块、finally 块或受约束的执行区域)中,则调用的线程可能会阻塞。

我的问题是:

  1. 静态构造函数真的作为受约束的执行区域 (CER) 运行吗?
  2. 如果是,还有哪些其他作为 CER 运行的代码块?
0 投票
2 回答
240 浏览

c# - 如何使用 thread.abort()

如果用户想要而不是退出应用程序,我只是试图通过单击按钮停止进程来中止线程。

这是原始代码:

我试过的:

我通过将线程字段移出方法来尝试从按钮单击事件中的 Abort() 线程,这样您就可以从按钮单击事件中获取访问权限,但它会引发许多错误:

这就是我所做的,但我得到了错误:

在 e 和 genericlist 下:字段初始化不能引用非静态字段、方法或属性。

0 投票
1 回答
162 浏览

c# - 立即中止异步任务c#

我正在为我的应用程序设计一个插件系统。

UI 中有一个“开始”按钮。当用户点击它时,应用程序应该异步调用插件 dll 中的一个方法,并将“开始”更改为“停止”。该方法可以包括几乎任何东西,就像插件一样。当用户单击“停止”时,该异步方法应立即终止

我想用Thread.Abort();,但大家建议不要用。如果我使用 CancellationTokenSource,我必须为所有插件添加取消处理,我不想这样做。

我需要一台 PC 的强制关机拔出销毁(如果需要!)之类的东西。对我来说唯一重要的是立即停止。不需要清理或类似的事情,因为我的应用程序在使用它后会卸载插件,并且插件与主应用程序代码无关。

反正没有异步启动一个方法并完全控制它吗?在这种情况下可以使用Thread.Abort();(如果我保证 dll 不会捕获线程中止异常)?

编辑:有没有办法在运行方法时异步主动监视插件dll(类)中的取消令牌,并在请求时杀死方法?

EDIT2:我认为这不是一个好主意,但是创建一个新流程和使用Process.kill()呢?

0 投票
0 回答
40 浏览

java - 中止 AWT 应用程序

我有一个外部公司制作的 AWT 应用程序(我无法更改它),他们通过事件调度线程调用长时间进程(调用数据库)......这意味着,当应用程序等待来自数据库的结果时,整个应用程序不响应任何用户输入(单击退出按钮等)

有没有办法以编程方式杀死这个应用程序......意味着例如将应用程序包装在其他窗口中,该窗口与卡住的事件调度线程无关?或者以某种方式中止 EDT?或者还有其他可能吗?

0 投票
0 回答
72 浏览

c# - 如何从外部 REST API 调用中停止多个线程(任务)?

所以我在这里处理的是一个非常复杂的服务器应用程序,它执行相当长、复杂和冗长的操作,涉及许多线程和许多任务(是的,有些是作为任务创建的,有些是“手动”创建的线程。

我们这里所说的复杂而冗长的过程是使用 REST API 调用触发的(假设网页根据用户输入生成请求对象),并为用户提供一个 ID 以轮询操作的进度。

我正在寻找一种有效的方法来允许用户单击“中止/停止”按钮,该按钮将停止整个线程/任务管弦乐队。

(请记住,该服务器可以处理如上所述的多个请求)。

我研究了许多选项,所有这些似乎都要求线程/任务本身在其操作循环期间监视“中止标志”,并在需要时退出循环。

显然使用Thread.Abort是一个很大的禁忌。

我曾想过拥有某种抽象类(例如:)AbortableThread,所有这些我的“工作”线程都必须实现,其中唯一的抽象函数是 Abort(),这样每个线程都可以以干净的方式结束,关闭并完成它需要的任何东西。

这样,我也许可以密切关注由特定用户请求产生的线程,然后循环调用Abort()foreach

尽管如此,我仍然试图弄清楚它如何能够闯入我运行的循环,所以我的第二个想法是这个“抽象”类可能有一个属性shouldBreak,我将再次能够从“外部”设置”,但这让我回到(几乎)第一方,我必须在我的线程中添加“逻辑”才能中止。

我想出的第三个想法是让我的逻辑循环Abort()在每个循环上调用,而无需任何验证当前是否需要中止,在那里我将检查我的抽象基类 shouldBreak bool 并在需要时采取相应的行动。

没有代码示例,我决定在深入实施之前我宁愿在高层次上弄清楚这一点。

感谢您阅读这个长长的问题!

0 投票
0 回答
59 浏览

c# - 取消多个线程

我试图通过单击 WinForms 中的按钮来取消多个线程。下面列出了我的线程方法,然后线程调用另一个方法。我将线程创建为类变量,然后循环并为用户想要的多个线程创建一个新线程。我想通过单击停止按钮来停止调用线程。我找不到任何类似的问题。最初,在我下面的generate()方法中,我会检查按钮是否被单击并且会Abort(),但这仅在当时和那里单击按钮时才有效。

0 投票
0 回答
86 浏览

c# - 如何中止线程以确保应用程序不会卡住?

下面给出的是使用WorkingBlock函数的代码。该应用程序使用 C# 3.0。

方法代码运行良好,WorkingBlock除非在某些情况下应用程序冻结。

最初,该WorkingBlock方法是直接在CallerFunction. 建立了以下结构来缓解应用程序冻结的问题。

但是,即使在此之后,控件仍将存在于 的WorkingBlock方法中,DoAction Thread并且应用程序仍然会卡住。我什至尝试设置DoAction.IsBackgroundtrue但没有任何效果。

有没有办法强制中止,DoAction Thread这样应用程序就不会卡住?控件应该完全离开该CallerFunction方法。