检查MainWindow是否已存在

时间:2014-04-24 01:16:05

标签: c# wpf single-instance

我有一个C#/ WPF应用程序,它包含一个主窗口和一个系统托盘图标。我已使用ShutdownMode =“OnExplicitShutdown”配置App.xaml,以便在关闭主窗口时使应用程序在系统托盘中运行。

在系统任务栏图标的上下文菜单中,我将菜单项绑定到重新打开主窗口的方法:

private void SysTray_Information_Click(object sender, RoutedEventArgs e)
{
    var newWindow = new MainWindow();
    newWindow.Show();
    MainWindow.Focus();
}

我想在这些方法中添加一个检查以查看主窗口是否已经显示(尚未关闭)。否则,可以打开主窗口的多个副本。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

信号量或互斥量适用于应用程序级别。此代码适用于winfroms应用程序,但我相信它可以进行修改以满足您的需求。

static void Main()
{
    System.Threading.Mutex appMutex = new System.Threading.Mutex(true, "MyApplicationName", out exclusive);
    if (!exclusive)
    {
        MessageBox.Show("Another instance of My Program is already running.","MyApplicationName",MessageBoxButtons.OK,MessageBoxIcon.Exclamation );
        return;
    }
    Application.Run(new frmMyAppMain());
    GC.KeepAlive(appMutex);
}

答案 1 :(得分:1)

听起来你可以使用静态变量:

public class MainWindow : Window
{
    private static bool _isInstanceDisplayed = false;
    public static bool IsInstanceDisplayed() { return _isInstanceDisplayed; }
}

加载窗口时将其设置为true。然后您可以根据需要使用以下方法进行检查:

if (MainWindow.IsInstanceDisplayed()) { ... }