退出 ac# 应用程序会将其保留在内存中
我正在使用 C# 编写一个 Windows 窗体,用于安装 WSP 并将其部署到共享点服务器。 我遇到的问题是,当我检测到问题并退出应用程序时,或者当按下表单右上角的十字时,表单将关闭,但任务仍在进程列表中。
我的退出代码是:
this.close();
application.quit();
我在表单之间进行更改的方式是:
form2.show();
form1.hide();
到目前为止我唯一的猜测是我使用了一些后台工作人员,可能这些工作人员不会同时终止?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当所有未设置为后台线程的线程终止时,进程终止。
BackgroundWorker 在内部对委托调用 BeginInvoke,这会导致代码从 ThreadPool 中的线程运行。 ThreadPool 线程将 IsBackground 设置为 true,因此它不应导致应用程序挂起。问题不太可能是由BackgroundWorker 引起的。
更有可能的是,您在代码中的某个位置使用
new Thread()
或类似方法手动创建新线程,并且尚未设置该线程的 IsBackground 成员设置为 true。The process terminates when all threads that are not set as background threads terminate.
BackgroundWorker internally calls BeginInvoke on a delegate and that causes the code to be run a thread from the ThreadPool. The ThreadPool threads have IsBackground set to true, so it should not cause the application to hang. It is unlikely that a BackgroundWorker is causing the problem.
More likely, you have a place in your code where you are manually creating a new thread using
new Thread()
or similar and you have not set this thread's IsBackground member to true.连接调试器应该很容易(您可以获取 托管堆栈资源管理器(如果出现问题的计算机上没有调试器),您可以中断进程以查看当前正在执行哪些线程。在 Visual Studio 中,您应该查看“线程”窗口并找到正在执行代码的线程。双击它,然后查看“调用堆栈”窗口以查看是什么阻碍了事情。
It should be pretty easy to attach a debugger (you can get the Managed Stack Explorer if you don't have a debugger on the machine exhibiting the problem) and you can break into the process to see which threads are currently executing. In Visual Studio you should look in the Threads window and find one that's executing your code. Double click it, then look in the Call Stack window to see what's holding things up.