Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 当我使用application.Exit()或Form.Close()时,为什么我的notifyicon应用程序没有退出?_Winforms - Fatal编程技术网

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

Winforms 当我使用application.Exit()或Form.Close()时,为什么我的notifyicon应用程序没有退出?,winforms,Winforms,我有一个Windows窗体应用程序,它会退出到系统托盘的Notifyicon,我尝试调用application.exit()或Me.Close()来关闭程序。但两者都无法关闭程序。关闭它的正确方法是什么 在结束应用程序之前,最好让系统托盘图标不可见,否则,当应用程序不再运行时,它可能会在托盘中停留 该位指的是通知区域(系统托盘),没有真正轮询以确保图标对应的句柄仍然存在。因此,如果某个东西没有优雅地退出,或者没有清理它的通知图标,那么通知区域就不会意识到窗口句柄飞出了笼子 您可能以前见过这种行为

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

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

该位指的是通知区域(系统托盘),没有真正轮询以确保图标对应的句柄仍然存在。因此,如果某个东西没有优雅地退出,或者没有清理它的通知图标,那么通知区域就不会意识到窗口句柄飞出了笼子

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

但在我关闭程序后,托盘图标仍然显示,所有功能都可用。在我看来,这个程序还在运行

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

通知图标并不能让你的应用保持“活跃”,因为它没有一个消息泵在你的控制之下。应用程序中的某些内容未退出


希望这能帮助你走上正轨

嗨,伙计,我现在意识到怎么了。我实现了如下“退出到系统托盘”:在formclosing事件处理程序中,设置e.Cancel=true,隐藏winform并显示Notify图标。因为我取消了表单关闭,所以将来的表单关闭也会被取消,这就是问题所在。我现在要做的是添加一个全局布尔变量RealExit=False。从trayicon退出时,将布尔值设置为True。并且仅当布尔变量为False时才取消表单关闭事件。它解决了这个问题。你对这种做法有何评论?我有一个正确的方法“退出系统托盘,然后退出”?这是合理的。在关闭事件参数的形式中,还有一个CloseReason属性。如果(e.CloseReason==CloseReason.ApplicationExitCall),您可以这样做,并且您已经准备好了。