public partial class App : Application
{
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); [DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd); protected override void OnStartup(StartupEventArgs e)
{
if (!是否已运行)
{
//自动主程序
}
else
{
Application.Current.Shutdown();
ShowWindowAsync(process.mainWindowHandle, 9);
SetForegroundWindow(process.mainWindowHandle);
//实现效果为,当程序已经启动了,再次启动时,将之前已启动的主程序显示出来。
//当主程序是 Visibility = Visibility.Visible; 的时候可以达到效果,
//但是当主程序是 Visibility = Visibility.Hidden 的时候,用上面的方式显示不出来,请问要怎么样才能显示出来呢。
}
}
}
WPF
Visibility = Visibility.Hidden
//是为了实现托盘,
{
mutex = new System.Threading.Mutex(true, "Main");
if (!mutex.WaitOne(0, false))
{
Application.Current.Shutdown();
//这里用什么方式 显示主窗体呢,
}
else
{
mutex.ReleaseMutex();
//启动主程序
}
}
http://codereview.stackexchange.com/questions/20871/wpf-single-instance-best-practicesok. 已参照这里 解决了