退出 ac# 应用程序会将其保留在内存中

发布于 2024-08-18 12:12:19 字数 326 浏览 5 评论 0 原文

我正在使用 C# 编写一个 Windows 窗体,用于安装 WSP 并将其部署到共享点服务器。 我遇到的问题是,当我检测到问题并退出应用程序时,或者当按下表单右上角的十字时,表单将关闭,但任务仍在进程列表中。

我的退出代码是:

this.close();
application.quit();

我在表单之间进行更改的方式是:

form2.show();
form1.hide();

到目前为止我唯一的猜测是我使用了一些后台工作人员,可能这些工作人员不会同时终止?

谢谢

I'm using c# to write a windows form which installs and deploys WSPs to a sharepoint server.
The problem I am having is that when I detect a problem and quit the application or when the cross in the top right of the form is pressed the form closes but the task is still in the process list.

My quit code is:

this.close();
application.quit();

The way i change between forms is:

form2.show();
form1.hide();

My only guess so far is that I use a few background workers, possibly these are not being terminated at the same time?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

热血少△年 2024-08-25 12:12:19

当所有未设置为后台线程的线程终止时,进程终止。

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.

夏见 2024-08-25 12:12:19

连接调试器应该很容易(您可以获取 托管堆栈资源管理器(如果出现问题的计算机上没有调试器),您可以中断进程以查看当前正在执行哪些线程。在 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文