2016-06-08 83 views
0

我有一個winforms應用程序安裝在多個用戶可訪問的終端服務上。此應用程序支持多個實例。winforms應用程序多個實例之間的通信

用戶登錄後,會加載一些設置,並與其他用戶一起出現。

首先,我希望獲得所有已經打開的實例並獲取它們的特定設置。如果已經打開了相同的設置,則不打算開啓新的實例。

有可能嗎?

PS:在登錄屏幕上,用戶可以從組合框中選擇您想要工作的公司,以便他可以打開與公司「A」的實例,然後打開公司的另一個實例「B」有兩個實例,同一個用戶和公司不同。

+1

請參閱關於創建單實例應用程序的文章,除非您需要對其進行修改,以便系統互斥體名稱基於用戶帳戶信息(如用戶名)中的內容。這樣,應用程序就是單個配置文件中的單個實例。 http://sanity-free.org/143/csharp_dotnet_single_instance_application.html –

+0

應用程序不能是單個實例,因爲用戶可能會打開多次,但使用不同的設置,並且此時必須檢查已打開的實例設置以瞭解如果你打開另一個。 –

+0

你應該在你的問題中更好地解釋這個要求。如果他們瞭解這一要求,它將幫助你從人們那裏得到更好的答案。 –

回答

1

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

我們的應用程序實際上是一組以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());

相關問題