我有一个单例,它有一个正在运行的线程,用于从服务器获取记录。 但是当我停止我的winform应用程序时,线程继续运行。我试图在我的单例中创建一个析构函数来中断线程,如果它正在运行,但它对线程没有任何影响 - 我知道析构函数是被唤起的。
我正在寻找有关在应用程序关闭时如何关闭线程的建议。 感谢
C#,。net2
答案 0 :(得分:60)
一个帖子可以是:
创建线程时,默认情况下它是前台线程。
您可以这样更改:
Thread t = new Thread(myAction);
t.IsBackground = true;
t.Start();
答案 1 :(得分:9)
如果可能,在您的申请中,最佳选择是合作取消。
当没有更多代码要执行时,线程会自动停止。因此,当用户关闭您的应用程序时,您设置一个标志,指示您的线程应该停止。线程需要不时检查是否设置了标志,如果是,则停止从服务器获取记录并返回。
否则,您可以推出自己的解决方案,例如
static bool isCancellationRequested = false;
static object gate = new object();
// request cancellation
lock (gate)
{
isCancellationRequested = true;
}
// thread
for (int i = 0; i < 100000; i++)
{
// simulating work
Thread.SpinWait(5000000);
lock (gate)
{
if (isCancellationRequested)
{
// perform cleanup if necessary
//...
// terminate the operation
break;
}
}
}