如何处理表单关闭和服务器注销?

时间:2018-06-23 00:36:28

标签: c# c++

所以我有C ++服务器和C#客户端(GUI)

我有7种表单,当我关闭任何表单时,客户端都不会断开与服务器的连接(客户端需要向消息发送msg到服务器,说他想退出/退出)。

我尝试添加Form_Closing事件,但是在很多情况下,表单不是由用户和程序关闭的,而Form_Closing却由用户关闭,即使用户仍在程序中。

所以我的问题是

  • 是否有针对此的修复程序?向每个表单中添加Form_Closing事件很长,很可能无法解决问题或会解决该问题,但是会花费很多时间。

我想知道是否有一个事件来查看用户是否正在关闭(通过 X 按钮或 ALT + F4 或通过任务管理器或由用户以某种方式...)

我确定这是一个已知问题-当客户端强行退出GUI时,将其从服务器注销。

1 个答案:

答案 0 :(得分:0)

您可以通过访问FormClosingEventArgs参数的CloseReason来找出关闭表单的原因:

private void Form_Closing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.ApplicationExitCall)
        ; // Do something in this case
}

值得阅读有关该枚举的文档以查找查找程序的详细信息。但我建议,不可能捕捉到您的应用可能关闭的所有原因,例如,如果该过程被用户终止(“终止”),您将不会收到警告,该过程将简单地结束。最好设计一些东西,以便服务器在超时后关闭它可能保留的所有会话。