所以我有C ++服务器和C#客户端(GUI)
我有7种表单,当我关闭任何表单时,客户端都不会断开与服务器的连接(客户端需要向消息发送msg到服务器,说他想退出/退出)。
我尝试添加Form_Closing
事件,但是在很多情况下,表单不是由用户和程序关闭的,而Form_Closing
却由用户关闭,即使用户仍在程序中。
所以我的问题是
我想知道是否有一个事件来查看用户是否正在关闭(通过 X 按钮或 ALT + F4 或通过任务管理器或由用户以某种方式...)
我确定这是一个已知问题-当客户端强行退出GUI时,将其从服务器注销。
答案 0 :(得分:0)
您可以通过访问FormClosingEventArgs
参数的CloseReason
来找出关闭表单的原因:
private void Form_Closing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.ApplicationExitCall)
; // Do something in this case
}
值得阅读有关该枚举的文档以查找查找程序的详细信息。但我建议,不可能捕捉到您的应用可能关闭的所有原因,例如,如果该过程被用户终止(“终止”),您将不会收到警告,该过程将简单地结束。最好设计一些东西,以便服务器在超时后关闭它可能保留的所有会话。