Process.CloseMainWindow()不会引发Form.Closing事件

时间:2017-01-24 09:07:46

标签: c# winforms

我有2个不同的应用程序同时运行。一个是隐藏表单的应用程序,没有任务栏图标只有通知图标表单 此应用程序是自主服务器,因此它必须保持隐藏状态 第二个是启动和重置第一个应用程序的代理

主窗体添加了事件处理程序:

    public Form1()
    {
        this.FormClosing += Form1_FormClosing;
    }

    private void doDispose()  {
        //Takes time to disconnected
        //about 1 seconds delay
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        doDispose();
    }

代理应用程序中的代码(在app上调用reset action)

private void resetApp() {
                     var process = //get process from Prcesses collection
                        try
                        {


                            process.CloseMainWindow(); <- not raising closing event in the main form
                            process.WaitForExit(1000);
                            process.Close();
                        }
                        catch
                        {
                        }

   }

我尝试了不同帖子中的一些东西。比如,使用process.MainWindowHandle访问主模型,但因为表单被隐藏,它总是返回零。

PS - 当手动关闭隐藏表单的第一个应用程序时,会引发事件并按原样执行断开连接过程。从第二个代理应用程序关闭它不起作用

谢谢

1 个答案:

答案 0 :(得分:0)

根据您关闭表单的方式,它可能会也可能不会触发Closing事件,请参阅wmClose上的Form.cs源代码()

http://www.dotnetframework.org/default.aspx/Dotnetfx_Win7_3@5@1/Dotnetfx_Win7_3@5@1/3@5@1/DEVDIV/depot/DevDiv/releases/whidbey/NetFXspW7/ndp/fx/src/WinForms/Managed/System/WinForms/Form@cs/1/Form@cs

您是否尝试重写Dispose方法?

sum(
sum (count(distinct SDDoc)) , (count(distinct case when  Netvalue = '0' then 1 else null end)) As result)