2013-03-19 37 views
0

首先,我想解釋「第二次啓動」:我使用SingleInstanceController approach可以調用我的應用程序的EXE文件並接受參數。最小化WinForms應用程序在第二次啓動時恢復爲正常

這樣,其他應用程序或用戶可以告訴應用程序採取特定的操作。

該應用程序設置爲以MinimizedWindowState開頭,並且僅在用戶單擊要恢復的托盤圖標時纔會返回Normal

但我看到的是,第一次啓動應用程序時,它保持最小化。然後當我第二次調用EXE文件時,它恢復到正常的窗口狀態。

我沒有改變窗口狀態的代碼。

我懷疑這是因爲別的東西在觸發恢復。

SingleInstanceController的代碼如下所示:

public class SingleInstanceController : WindowsFormsApplicationBase 
{ 
    public SingleInstanceController() 
    { 
     IsSingleInstance = true; 

     StartupNextInstance += this_StartupNextInstance; 
    } 

    void this_StartupNextInstance(object sender, StartupNextInstanceEventArgs e) 
    { 
     Form1 form = MainForm as Form1; 
     string command = e.CommandLine[1]; 

     switch (command.ToLowerInvariant()) 
     { 
      case "makecall": 
       string phoneNumber = e.CommandLine[2]; 
       PhoneAppHelper.MakePhoneCall(phoneNumber); 
       break; 
      default: 
       System.Windows.Forms.MessageBox.Show("Argument not supported"); 
       break; 
     } 
    } 

    protected override void OnCreateMainForm() 
    { 
     MainForm = new Form1(); 
    } 
} 

在我的形式,我有一個列表框,顯示連接的設備(USB),以及多文本框來顯示一些活動,最調試/信息目的。

與窗體上的控件的交互是否會導致還原?

回答

1

是的,這是WindowsFormsApplicationBase.OnStartupNextInstance()的默認行爲。您可以通過覆蓋該方法而不是使用該事件來簡單地修復該問題。請注意,當您有消息要顯示時,您可能仍然希望發生這種情況。所以看起來類似於這樣:

protected override void OnStartupNextInstance(StartupNextInstanceEventArgs e) { 
    //... 
    switch (command.ToLowerInvariant()) { 
     // etc.. 
     default: 
      base.OnStartupNextInstance(e); // Brings it to the front 
      System.Windows.Forms.MessageBox.Show("Argument not supported"); 
      break; 
    } 
} 
+0

真棒!之前有什麼奇怪的是,它只是*恢復窗口狀態的第二次啓動。在手動最小化窗口後,第3,第4 ...第n次啓動使窗口最小化。 – MartinHN 2013-03-20 07:45:56

相關問題