【问题标题】:Application process will not close申请程序不会关闭
【发布时间】:2012-06-20 09:54:21
【问题描述】:

我有一个 WPF 应用程序,关闭应用程序后,它的进程 app.exe *32 仍在任务管理器的进程列表中运行。

我需要关闭它,因为当我对我的代码进行编辑时出现以下错误 -

Unable to copy file "obj\x86\Release\frontEndTest.exe" to "bin\Release\app.exe". The process cannot access the file 'bin\Release\app.exe' because it is being used by another process.

我知道在here.之前有人问过这类问题

但是,将我的 Assembly.cs 更改为 -

[assembly: AssemblyVersion("2.0.0")]
[assembly: AssemblyFileVersion("2.0.0")]

我想如果我要找到 Window closed 事件并在事件中放置类似 - Process.GetCurrentProcess().Kill(); 的东西,这样当用户从表单右上角的红色 'x' 按钮关闭应用程序时这可能会杀死这个过程?

【问题讨论】:

  • 在您的主窗口关闭后,您很可能有一些线程仍在运行。你使用BackgroundWorkers 或Threads 吗?如果是这样,您将不得不以某种方式通知他们终止。
  • 线程分为两类:后台和非后台。当父进程死亡时,后台线程会自动终止;非后台线程将使父进程保持活动状态。也许您有一个或多个线程应该是后台线程?
  • 我明白了,我怎么知道哪些线程正在运行以及如何终止它们?

标签: c# wpf process exe


【解决方案1】:

因此,您的进程在您关闭后仍然有效。这通常意味着你有一个线程让它保持活力。以下是您可以追踪它的方法。

首先,在调试器中附加它:

                       

                             

现在打开线程列表:

     

双击您在此处看到的每个主题:

你会被带到线程当前正在做什么:

                       

这就是阻止应用关闭的原因。必须退出该循环才能退出应用程序(或者,将Thread.IsBackground 设置为true)。

【讨论】:

  • 这是一个非常有用的答案,现在我可以看到线程,但是源不可用,因为它在您的应用程序中?
  • @Jambo 但是你可以看到让它保持活力的线程,对吧?它有名字吗?类别是什么?您可能想在您的问题中发布您的主题的屏幕截图。
  • 我们可以在没有 Visual Studio 的情况下做到这一点吗?
  • @user960567 你应该可以用任何值得的调试器来做到这一点,但我只知道如何在 Visual Studio 中做到这一点。 WinDbg 当然可以做到这一点,但它并不完全是用户友好的。
  • @RomanStarkov 非常有帮助。帮助我找到了试图每 60000 毫秒检查一次互联网可用性的类似线程问题。跟踪该线程并将 Thread.IsBackground 设置为 true 解决了我的问题。非常感谢:)
【解决方案2】:

Environment.Exit(0);

Terminates this process and gives the underlying operating system the specified exit code.    

成功完成后返回0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多