2012-06-20 69 views
12

我有一个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: AssemblyVersion("2.0.0")] 
[assembly: AssemblyFileVersion("2.0.0")] 

我想也许如果我找到- 解决方案并没有为我改变我的Assembly.cs工作事件,并在事件中插入类似 - Process.GetCurrentProcess().Kill();,这样当用户从窗体右上角的红色'x'按钮关闭应用程序时,这可能会终止进程?

+2

很可能你的主窗口关闭后仍有一些线程仍在运行。你使用任何'BackgroundWorker'或'Thread's?如果是这样,你将不得不以某种方式指示他们终止。 – Jon

+0

有两类线程:背景和非背景。当父进程死亡时,后台线程将自动终止;非后台线程将使父进程保持活动状态。也许你有一个或多个线程应该是后台线程? –

+0

我明白了,我该如何判断哪些线程正在运行以及如何终止它们? – Ebikeneser

回答

41

所以你的过程在关闭后仍然存在。这通常意味着你有一个线程保持活着。以下是您可以如何追踪它的方法。

首先,重视它在调试器:

                                enter image description here

enter image description here

                                        enter image description here

现在打开线程列表:

        enter image description here

双击每个线程你在这里看到:

enter image description here

而且你会采取什么线程目前正在做:

                                enter image description here

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

+0

这是一个非常有用的答案,现在我可以看到线程,但是源代码不可用,因为它在您的应用程序中? – Ebikeneser

+0

@Jambo但是你可以看到保持活力的线程,对吧?它有名字吗?什么是类别?您可能想在您的问题中发布线索的屏幕截图。 –

+0

我们可以在没有Visual Studio的情况下做到这一点吗? – user960567

10

Environment.Exit(0);

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

成功完成后返回0。