gpt4 book ai didi

wpf - 如何以编程方式重新启动单实例应用程序

转载 作者:行者123 更新时间:2023-12-02 04:26:08 25 4
gpt4 key购买 nike

我的 WPF 程序使用 SingleInstance.cs以确保当用户尝试通过双击快捷方式或某种其他机制来重新启动它时,只有一个实例正在运行。但是,我的程序中有一种情况需要自行重新启动。这是我用来执行重新启动的代码:

App.Current.Exit += delegate( object s, ExitEventArgs args ) {
if ( !string.IsNullOrEmpty( App.ResourceAssembly.Location ) ) {
Process.Start( App.ResourceAssembly.Location );
}
};

// Shut down this application.
App.Current.Shutdown();

这在大多数情况下都有效,但问题是它并不总是有效。我的猜测是,在某些系统上,第一个实例和 RemoteService它创建尚未终止,这会导致进程通过调用 Process.Start( App.ResourceAssembly.Location ); 启动终止。

这是我的 app.xaml.cs 中的 Main 方法:

[STAThread]
public static void Main() {
bool isFirstInstance = false;

for ( int i = 1; i <= MAXTRIES; i++ ) {
try {
isFirstInstance = SingleInstance<App>.InitializeAsFirstInstance( Unique );
break;

} catch ( RemotingException ) {
break;

} catch ( Exception ) {
if ( i == MAXTRIES )
return;
}
}

if ( isFirstInstance ) {
SplashScreen splashScreen = new SplashScreen( "splashmph900.png" );
splashScreen.Show( true );

var application = new App();
application.InitializeComponent();
application.Run();

SingleInstance<App>.Cleanup();
}
}

如果以编程方式重新启动新实例,获取此代码以允许启动新实例的正确方法是什么?我应该添加bool标志Restarting并在 for 中等待循环调用SingleInstance<App>.InitializeAsFirstInstance返回 true?或者有更好的办法吗?

最佳答案

要做的一件事是,当您调用 Process.Start 时,将一个参数传递给可执行文件,告诉它这是“内部重新启动”情况。然后,进程可以通过等待更长的时间来退出来处理该问题。您甚至可以告诉它 ProcessID 或其他信息,以便它知道要注意什么。

关于wpf - 如何以编程方式重新启动单实例应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13885787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com