标签: isbackground

当应用程序关闭时,我可以检测应用程序何时杀死后台线程吗?

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

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

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

c# multithreading isbackground threadabortexception

12
推荐指数
1
解决办法
1858
查看次数

关闭具有线程的Windows服务

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

当用户停止服务时,所有线程会发生什么?他们优雅地死了吗?我没有任何代码通过调用join或abort来管理线程.假设IsBackground = true足以假设线程将在用户停止服务时被处理和停止是否正确?当有人通过Service Manager GUI停止Windows服务时会发生什么?它会在触发OnStop事件后终止进程吗?

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

我只是好奇如果他们跳过这些步骤并停止服务会发生什么......似乎IsBackground帮助实现了这个目标:

wcf multithreading windows-services isbackground

7
推荐指数
1
解决办法
1955
查看次数

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

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

我知道它会变成令人讨厌的Thread.Abort(),但是在这个后台线程中没有任何东西需要保持正确的状态或需要适当的清理.

如果用户只是在后台线程中间关闭应用程序,我试图避免任何崩溃.由于多线程场景很难测试,我想就此主题发表意见.

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

.net multithreading isbackground

5
推荐指数
3
解决办法
3197
查看次数