代码之家  ›  专栏  ›  技术社区  ›  zerkms

线程、进程和应用程序。退出()

  •  3
  • zerkms  · 技术社区  · 14 年前

    我的应用程序由主消息循环(GUI)和线程组成(任务工厂).

    在线程中,我使用 var p = new Process();

    但当我调用 Application.Exit(); 在消息循环中-我可以看到在线程中启动的进程仍然在内存中并且正在执行。

    应用程序。退出(); 已调用?

    升级版 :

    旧的:

    p.WaitForExit();
    

    新增:

    while (!p.WaitForExit(1000))
    {
        if (FlagToExit)
        {
            p.Kill();
            return;
        }
    }
    
    6 回复  |  直到 14 年前
        1
  •  3
  •   Mark Cidade    14 年前
        2
  •  8
  •   Shrikant Soni    14 年前

    试试这个

    Thread.IsBackground = true;
    

    继续 Application.Exit();

    所有线程都将关闭

        3
  •  1
  •   Stephen Cleary    14 年前

    最好的解决方案是为子进程创建一个信号,并让它们在收到信号时退出,优雅地关闭它们。

    如果流程超出了您的控制范围,那么您必须使用 Process.CloseMainWindow Process.Kill 在父进程准备退出时杀死它们。

        4
  •  1
  •   parseh    9 年前

    Foreground . 和一个 线程(GUI)无法终止另一个 前景 线程。所以您只需要将新线程标记为 Background 前景 如果要将线程标记为 背景 线程您只需要将此添加到代码中:

    p.IsBackground = true;
    
        5
  •  0
  •   blez    14 年前

        6
  •  -1
  •   Thomas Hahn    7 年前

    使用Invoke()并运行应用程序。退出()命令如下:

    this.Invoke((Action)delegate ()
    {
        Application.Exit();
    });