我有一个C#/ WPF应用程序,它包含一个主窗口和一个系统托盘图标。我已使用ShutdownMode =“OnExplicitShutdown”配置App.xaml,以便在关闭主窗口时使应用程序在系统托盘中运行。
在系统任务栏图标的上下文菜单中,我将菜单项绑定到重新打开主窗口的方法:
private void SysTray_Information_Click(object sender, RoutedEventArgs e)
{
var newWindow = new MainWindow();
newWindow.Show();
MainWindow.Focus();
}
我想在这些方法中添加一个检查以查看主窗口是否已经显示(尚未关闭)。否则,可以打开主窗口的多个副本。我怎样才能做到这一点?
答案 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()) { ... }