2010-10-13 102 views
2

我有一個應用程序,我有幾種形式。在這種形式下,我有一個系統設置窗體。我必須從菜單中打開此表單以及在桌面上創建的快捷方式。如何防止窗體多次打開

我可以從2個地方單獨打開表格。但問題是,它打開了兩個單獨的同一個表單實例。這意味着,首先,我點擊菜單打開表單。現在我的表單實例被創建並顯示在屏幕上。但是,無論何時點擊我的桌面圖標,它都會創建相同表單的另一個實例,而不是顯示相同的表單。 。所以這意味着它顯示了兩個相同表單的實例。

但我只顯示一個表單。我也試過並在網上搜索過。我沒有找到任何信息。

任何人都可以請幫我解決這個問題。任何類型的建議對我來說都會很有幫助。

+0

這聽起來像你有2個應用程序運行,這是正確的嗎? – leppie 2010-10-13 07:53:00

+0

您提到的桌面圖標是一個Windows桌面 - 如果是這樣,您正在創建一個全新的應用程序實例。你想讓你的應用程序暫時不用一次? – riffnl 2010-10-13 07:54:16

+0

抱歉的延遲,其實我的桌面快捷方式也是一個EXE(來源),這將打開一個特定的形式在目標EXE。如果我們在目標exe文件中,那麼我們可以使用互斥鎖或單例打開窗體的一個實例。但由於請求來自另一個exe文件。即源碼EXE,這個互斥概念也不起作用。 – Dinesh 2010-10-14 04:52:59

回答

0

我已經使用semaphor概念來進行控制。每當表單被打開時,我正在寫入一個註冊表項。一旦表格關閉,我將刪除此條目。

因此,每當我嘗試打開表單時,它都會檢查註冊表項。基於它將打開表單。

2

聽起來對我來說,你需要一個互斥來控制在給定的時間只有一個應用程序實例正在運行。

進一步的細節

3

您需要一個實例。這個構造在.Net框架中已經可用。請查看Hanselman的this post

注意:我知道這個類的命名空間是VisualBasic。但是這不應該妨礙你在你的C#應用​​程序中使用它。這只是名稱空間的名稱。這並不意味着它的功能。 (微軟有更好的名字叫Foo,在這種情況下它會更受歡迎。)

0

聽起來像你需要修改版本的Singleton設計模式。嘗試在內部調用表單構造函數的類中使用公共靜態方法。然後,正如有人建議使用計數器變量來跟蹤該靜態方法被調用的次數,從而爲您提供一個度量標準,您可以使用該度量標準來確保創建實例時只有所需的數字。