winforms之间的通信应用多个实例

时间:2016-06-08 18:24:56

标签: c# winforms visual-studio-2013 windows-10

我在多个用户访问的终端服务上安装了winforms应用程序。此应用程序支持多个实例。

用户登录后,会加载某些设置,其他用户也会这样做。

首先,我希望获得所有已打开的实例,并为其设置特定设置。如果已经使用相同的设置打开,则意图不是保持打开新实例。

有可能吗?

PS:在登录屏幕上,用户可以从组合框中选择您想要工作的公司,这样他就可以打开公司“A”的实例,然后再打开公司“B”的另一个实例两个实例,同一个用户和公司不同。

1 个答案:

答案 0 :(得分:1)

您可以在应用程序Mutex中使用program.cs

我们的应用程序实际上是一个以中央EXE开头的应用程序集合,然后EXE可以启动其他应用程序。此外,主要应用有三种口味。我们需要确保每个用户上下文中只有一个风格打开。

我们用这个:

Boolean createdNew;
var mut = new Mutex(true, Assembly.GetExecutingAssembly().FullName, out createdNew);
if (!createdNew)
{
    if (String.IsNullOrEmpty(appName))
        return;

    var processName = Process.GetCurrentProcess().ProcessName;
    foreach (var p in Process.GetProcessesByName(processName))
    {
        if (p.MainWindowTitle.Contains(appName))
        {
            if (userVars.SendDebugOutput)
            {
                //we found one already running...do anything about it?
            }
            return;
        }
    }
}

您需要修改互斥锁创建,以包含一个字符串,其中包含您在区分实例时需要使用的信息。

这将放在program.cs代码页,之前启动主表单的行,例如Application.Run(new frmMyMainForm());