当winform应用程序关闭时,如何停止线程

fis*_*ead 12 .net c# multithreading

我有一个单例,它有一个运行线程,用于从服务器获取记录.但是当我停止我的winform应用程序时,线程继续运行.我试图在我的单例中创建一个析构函数来中断线程,如果它正在运行,但它对线程没有任何影响 - 我知道析构函数是被唤起的.

我正在寻找关于如何在应用程序关闭时关闭线程的建议.谢谢

C#,.net2

did*_*ier 61

一个线程可以是:

  • 前景:将一直保持你的程序,直到它完成.
  • 背景:关闭您的应用程序时将终止.

创建线程时,默认情况下它是前台线程.

你可以改变这样:

Thread t = new Thread(myAction);
t.IsBackground = true;
t.Start();
Run Code Online (Sandbox Code Playgroud)


dtb*_*dtb 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)