mah*_*nah 3 c# wpf winapi window process
我有一个名为app1的WPF应用程序,它有一个名为window1的窗口.当用户单击关闭按钮时window1,应用程序不会关闭,但window1会隐藏(this.hide()).
我想在启动时检查应用程序的另一个实例是否已在运行; 如果是这样,我想显示已经运行的实例并终止新实例.
我怎样才能做到这一点?
我知道如何检查进程以及如何关闭当前应用程序,但我不知道如何显示正在运行的另一个WPF进程的窗口...
在我的App启动活动中,我这样做:
private void Application_Startup(object sender, StartupEventArgs e)
{
if(Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Count() > 1)
{
Application.Current.Shutdown(0);
}
}
Run Code Online (Sandbox Code Playgroud)
一种典型的方法是使用互斥锁.这允许您阻止启动第二个实例(或者更确切地说,在应用程序的第二个实例中检测它).
此时,您可以通知原始应用程序实例"显示"自身.这是一篇很好的文章,详细描述了整个过程(尽管使用的是Windows Forms).
对于WPF应用程序,您需要将此逻辑放在Application的启动逻辑中,并添加一个HwndSourceHook来处理您希望显示的WPF窗口中的Windows消息.