问题标签 [isbackground]

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 回答
3283 浏览

.net - 当应用程序终止时,我可以安全地依赖线程中的 IsBackground 吗?

我在 GUI 中运行一些后台线程。目前我正在实现个人线程取消代码,但线程中有 IsBackground 属性,根据 MSDN,他们会自行取消。

我知道它会去 Thread.Abort() 这很讨厌,但是在这个后台线程中没有任何事情需要我保持适当的状态或需要适当的清理。

如果用户只是在后台线程中间关闭应用程序,我会尽量避免任何崩溃。由于多线程场景很难测试,我想听听您对这个主题的看法。

基本上,我应该设置 IsBackground = True 而不是滚动我自己的代码,而忘记其余的?

0 投票
1 回答
2312 浏览

wcf - 关闭具有线程的 Windows 服务

我有一个用 .NET 3.5 (c#) 编写的 Windows 服务,它带有一个 System.Threading.Timer,它在每个回调中生成多个线程。这些只是普通线程(没有线程池),我已经在每个线程上设置了IsBackground = true,因为我只会运行托管代码。

当用户停止服务时,所有线程会发生什么?他们会优雅地死去吗?我没有任何通过调用加入或中止来管理线程的代码。假设IsBackground = true是否足以假设当用户停止服务时线程将被释放和停止?当有人通过 Service Manager GUI 停止 Windows 服务时,究竟会发生什么?它会在触发 OnStop 事件后终止进程吗?

这对我来说实际上是可以接受的,因为我已经建立了一个单独的机制,允许用户在停止服务之前确定没有线程。这是通过从在 Windows 服务内运行的 ServiceHost 公开的 2 个 WCF 方法完成的。有一种方法可以停止产生新线程,另一种方法可以查询剩余多少正在运行的线程。

我只是好奇如果他们跳过这些步骤并停止服务会发生什么......似乎 IsBackground 有助于实现这一点:

0 投票
2 回答
2157 浏览

c# - 当应用程序关闭时,我可以检测到后台线程何时被应用程序杀死?

我在 C# 中使用一个线程,我将 IsBackground 属性设置为 true。线程在循环中运行一些代码,直到应用程序关闭。当应用程序关闭时,线程也停止执行(因为我设置了 IsBackground = true)。

应用程序如何杀死线程?似乎它不会通过调用 abort 来做到这一点,因为我没有得到 ThreadAbortException。它发生在幕后吗?我想在我的 finally 循环块中做一些回滚。

我知道我可以自己在线程上调用 abort,但我想知道应用程序如何关闭我的后台线程,以及我是否可以从线程内部对其做出反应。我知道我可以订阅 Application.ApplicationExit 事件,但我在服务和 winform 中都运行此代码,我更喜欢在循环中捕获异常,以便能够在 finally 语句中回滚。

0 投票
0 回答
37 浏览

c# - 如果 AdditionalThread.IsBackground = false,如何从附加线程检查主线程是否已完成

有两个线程:主线程和附加线程。附加线程无限循环工作,应在主线程结束或应用程序结束后停止。你能告诉我告诉 AdditionalThread 应该停止它的最佳方法吗?也许我应该使用一些事件,它是在主线程中“返回”之后自动生成的,或者可能以某种方式检查主线程.IsAlive()还是我应该使用AppDomain.ProcessExit?

谢谢!