none
wpf程序退出的最后一个事件通知 RRS feed

  • 问题

  • 我有个需求就是在wpf程序A退出后启动一个附属程序B,但必须是程序A关闭后才能正常启动。我在A中是这样做的

    Shutdown();
    var info = new ProcessStartInfo { FileName = setupPath};
    Process.Start(info);

    偶尔会出错,提示程序A没有关闭,但是查看任务管理器却没有找到程序A,我该如何确保程序A关闭才启动程序B

    2014年4月24日 8:03

答案

  • 其实这是矛盾的,在你调用Process.Start(info);时,程序B就启动了,这时程序A肯定没有完全退出,因为Process.Start(info);这是属于程序A的代码,无论你把这行代码放在哪里,在执行这行代码是程序A肯定是在运行的。就算在执行这段代码后程序A马上完全关闭,程序B也是在程序A关闭之前启动的。

    如果要确保程序A完全退出后才启动程序B,你可以用在程序A退出前先启动一个中间程序C,然后在C里面判断A的process已经完全退出后再启动程序B。

    或者,修改B的代码,让在B启动时先判断A的process是否完全退出,等到完全退出后再开始执行接下来的代码。

    • 已标记为答案 skczjun 2014年4月25日 1:24
    2014年4月24日 9:22

全部回复

  • 在APP.XAML里有两个事件 一个是startup 一个是exit 就是开始第一个事件和结束最后一个事件

    Startup="Application_Startup" Exit="Application_Exit"

    希望采纳谢谢

    2014年4月24日 8:09
  • 其实这是矛盾的,在你调用Process.Start(info);时,程序B就启动了,这时程序A肯定没有完全退出,因为Process.Start(info);这是属于程序A的代码,无论你把这行代码放在哪里,在执行这行代码是程序A肯定是在运行的。就算在执行这段代码后程序A马上完全关闭,程序B也是在程序A关闭之前启动的。

    如果要确保程序A完全退出后才启动程序B,你可以用在程序A退出前先启动一个中间程序C,然后在C里面判断A的process已经完全退出后再启动程序B。

    或者,修改B的代码,让在B启动时先判断A的process是否完全退出,等到完全退出后再开始执行接下来的代码。

    • 已标记为答案 skczjun 2014年4月25日 1:24
    2014年4月24日 9:22
  • 恩 你这种方法才是比较合理的方法

    我想了下,可以不采用中间程序C,因为我的程序B是安装程序,我在安装程序安装前进行了等待程序A退出的逻辑,已经解决改问题了


    • 已编辑 skczjun 2014年4月25日 1:24 修改
    2014年4月25日 1:24
  • Application_Exit事件,实际上该程序还是没有完全退出。
    2015年6月16日 8:30