当我使用 Application.Exit() 或 Form.Close() 时,为什么我的 notificationicon 应用程序没有退出?

Ape*_*ure 4 winforms

我有一个 Windows 窗体应用程序,它退出到系统托盘 Notifyicon,并且我尝试调用 Application.Exit() 或 Me.Close() 来关闭该程序。但两者都无法关闭该程序。关闭它的正确方法是什么?

Nic*_*cki 5

最好在结束应用程序之前使系统托盘图标不可见,否则,当应用程序不再运行时,它可能会在托盘中徘徊。

该位指的是通知区域(系统托盘)并没有真正轮询以确保与图标相对应的句柄仍然存在。因此,如果某些内容没有正常退出或没有清理其通知图标,则通知区域不会意识到该窗口句柄已飞出笼子。

您以前可能见过这种行为:有时您将鼠标悬停在通知区域上,一旦鼠标开始悬停在您知道您不久前退出的应用程序的图标上,通知区域就会显示“好吧,闭上我的嘴,画画”我红了,猜猜那个手柄已经不在了”然后噗!删除图标。

但是当我关闭程序后,托盘图标仍然显示并且所有功能都可用。在我看来该程序仍在运行。

是的,在我看来你的应用程序仍在运行。请注意,这Application.Exit()并不一定要成功——存在过载,允许应用程序的其他部分取消请求。所以这是需要检查的事情。

通知图标并不能真正让您的应用程序保持“活力”,因为它没有受您控制的消息泵。您的应用程序中的某些内容未退出。

希望这有助于您走上正轨!

  • 嗨,伙计,我现在意识到出了什么问题。我像这样实现了“退出到系统托盘”:在formclose事件处理程序中,设置e.Cancel = true,隐藏winform并显示通知图标。由于我取消了表单关闭,将来的表单关闭也将被取消,这就是问题所在。我现在要做的是添加一个全局布尔变量 RealExit = False。退出托盘图标时,将布尔值设置为 True。并且只有当Boolean变量为False时才取消表单关闭事件。它解决了问题。您对这一做法有何评论?我有正确的方法“退出到系统托盘然后退出”吗? (2认同)