问题标签 [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.
c# - 当 GUI 需要一段时间时 WaitDialog
我有一个应用程序可能需要很长时间才能执行一些 GUI 更新。我不能在后台线程中运行它,因为长时间处理与更新只能在主线程中完成的 GUI 组件相关联。
因此,我创建了一个辅助类,它将在后台线程中创建并显示一个 WaitDialog 表单,直到 GUI 完成更新。
我的助手类如下所示:
在我的主 GUI 窗口中调用帮助程序类的代码如下所示:
这似乎工作正常,看起来就像我在 GUI 上想要的一样。WaitDialog 表单是模态的,在完成更新之前会阻止对主 GUI 表单的访问。一旦长时间运行的 GUI 任务完成,它将退出 Using 块,从而调用助手类的 Dispose 方法,该方法又将调用线程上的 Abort。
我的问题是,是否有更优雅的方式来终止线程或实现相同行为的更好方式?
c# - resetAbort 有什么作用?
您好我有以下测试代码:
每次中止时,都会执行 Thread.ResetAbort() 。我想知道这个 ResetAbort 做了什么。因为当我运行它时,我看到了以下输出:我会回来的!我会回来!我会回来!而且我没有看到输出“End”——看来这个程序根本没有结束。你知道为什么吗?谢谢!
c# - C#线程方法重置问题
我有一个线程数组,其中每个线程从线程搜索管理器获取搜索任务 - 使用生产者/消费者模块 - 当它完成时,它会等到来自搜索管理器线程的下一个信号。搜索是通过网络执行的 - 这需要大量时间(主要是获取 html 数据部分)。我的问题是当用户选择停止当前搜索并开始一组新搜索时,所有搜索在上一次网络搜索期间都很忙,所以目前,用户一直等到不再相关的搜索结束他们的任务和开始新的。
我的问题是 - 我怎样才能立即开始新的相关任务?我不能使用标志(指示线程跳过搜索),因为漫长的等待是为了获取 http 方法。有没有办法积极地停止该方法并从头开始?(我不喜欢使用新线程...)
提前致谢,
什穆尔。
c# - 线程中止留下僵尸事务和损坏的 SqlConnection
我觉得这种行为不应该发生。这是场景:
启动一个长时间运行的 sql 事务。
运行 sql 命令的线程被中止(不是我们的代码!)
当线程返回托管代码时,SqlConnection 的状态为“已关闭”——但事务在 sql 服务器上仍处于打开状态。
SQLConnection 可以重新打开,您可以尝试在事务上调用回滚,但它没有效果(不是我期望这种行为。关键是没有办法访问数据库上的事务并滚动它背部。)
问题只是线程中止时没有正确清理事务。这是 .Net 1.1、2.0 和 2.0 SP1 的问题。我们正在运行 .Net 3.5 SP1。
这是一个说明该问题的示例程序。
有一个针对 .Net2.0 SP1 的 Microsoft 修补程序应该解决这个问题,但我们显然有较新的 DLL (.Net 3.5 SP1) 与此修补程序中列出的版本号不匹配。
谁能解释这种行为,以及为什么 ThreadAbort仍未正确清理 sql 事务?.Net 3.5 SP1 是否不包含此修补程序,或者此行为在技术上是正确的?
.net - Thread.abort 永远挂起
在远程计算机上启动 wmi 查询的代码。此代码同时在多个线程中运行。
在主线程中运行的代码:
两个问题:
如何停止第一个线程?
如何停止第一个线程而不造成死锁?
.net - 中止线程池线程
问题的答案 -实现 C# 通用超时提供了一个涉及中止线程池线程的解决方案。我知道中止显式创建的线程的后果。我想,中止线程池线程的后果将超过中止显式线程的后果。我想知道:
- 线程池线程中止时会发生什么?
- 线程是否完全无法使用?
- 中止线程的堆栈内存是否被释放?
- 当许多线程池线程被中止时会发生什么?线程池如何应对这种情况?
谢谢。
multithreading - 线程中止和线程退出不工作visualstudio2008 c++
我在 c++ visualstudio2008 中使用线程,当我的表单关闭时,线程仍然保持活动状态,所以我在表单关闭时尝试了 thread::abort,但在调用线程后仍然存在。所以我把 am excption 处理程序放在线程中,当一个中止异常到达时线程退出,但线程没有进入异常处理程序。我怎样才能关闭我的线程?oThread 是一个全局对象 Thread。
.net - 如果客户端断开连接,则中止 WCF 服务器任务
我们有一个托管在 Windows 服务下的 WCF 服务。该服务的客户端设置了closeTimeout、receiveTimeout、openTimeout、sentTimeout设置为5分钟。服务也一样。在某些情况下,WCF 服务可能需要 5 分钟以上的时间来处理一个任务。在这种情况下,客户端会中止调用,但服务进程会继续运行,直到完成其工作。
现在,问题是......是否有任何可用的配置/技术可以检测到客户端已断开连接或超时(或其他什么?),以便 WCF 服务可以中止其任务?
c# - Thread.Abort 在 catch{} 语句中导致死锁
我有一组打印不同类型文档的线程类。这些类使用继承来共享公共代码。类构造函数需要文件名和打印机名参数。方法创建一个Print()
新的工作线程,等待工作线程完成使用Thread.Join(timeout)
,如果超时则调用Thread.Abort()
工作线程Join
。工作线程启动一个可以打开指定文件的应用程序,使文件同步发送到打印机(通常使用应用程序的Print方法)并退出。工作线程的代码被包装在一个try{} ... catch{}
块中,以处理任何不可预见的外部应用程序崩溃。catch 块包含最少的清理和日志记录。
我发现我的应用程序没有响应,主线程在 Thread.Abort() 行的 Sleep/Wait/Join 中。我不记得工作线程的状态,但是应该在catch{}
块中执行的日志记录没有发生。(在我发现它没有响应后,我用 VS2010附加到我的进程中)。
我参考了Thread.Abort 方法中的以下注释:
如果正在中止的线程位于代码的受保护区域(例如 catch 块、finally 块或受约束的执行区域)中,则调用 Abort 的线程可能会阻塞。如果调用 Abort 的线程持有被中止线程所需的锁,则可能发生死锁。
我相信我有一个死锁问题,因为(1)它并不总是发生,(2)因为MSDN上的注释(上图)。
- 注意似乎暗示如果线程可以被'ed使用,则在线程内使用
try{} ... catch{}
是永远不会安全的。Abort()
这是真的? - 我看不出如何避免
Abort()
在我的场景中使用。改用Thread.Interrupt()
会有什么不同吗? - 如何解决我遇到的死锁问题?
BackgroundWorker 对我不起作用,因为我不需要进度报告,更重要的是,我的工作线程可能会在执行第三方应用程序时无限期阻塞。出于同样的原因,我不能要求我的线程终止,而只有一个选择 - 无情地Abort()
让工作线程。
c# - Thread.Abort() 卡在 NetworkStream.Read 上?
我有一个文件传输应用程序(服务器-客户端)......在发送文件时,我想启用取消。
客户端取消它由后台工作者工作的 SendFile 方法,然后它向服务器发送命令以取消其接收线程。
当服务器收到此命令时,它调用Stop 方法,但它停留在该行network.Read(data, 0, data.Length);
我怎样才能中止这个线程并最终进入而不会卡在 network.Read(..) 中?
提前致谢。