2010-05-02 59 views

回答

0

看起來像一個大問題是,當默認調用Startup時,它會在主窗體上調用Show()。

因爲這意味着函數返回,所以像啓動鏈接的原始示例一樣將Startup調用包裝在互斥體中,互斥鎖就會在啓動後不久發佈。如果你改變Statup從Show()向ShowDialog()打開主體的方式,它可以按預期工作。

0

當我第一次回答這個問題時,我閱讀並寫了WPF,但認爲「WCF」。愚蠢的我。這是我的新答案:

如果它必須是真正的全局性,請在任何使用共享資源之前的早期事件中設置互斥體設置。 Application.Startup可能是你最好的選擇。

0

你問這個創建一個單實例WPF應用程序?如果是這樣,我鼓勵你看看我在CodePlex上創建的this project。它提供了一個Application派生類,它包含了創建單實例/多實例感知WPF應用程序的邏輯,也處理實例間通信(即主應用程序可以接收傳遞給後續實例的參數)。 源代碼可用,因此您甚至可以檢查是否使用了全局互斥鎖和一些WaitHandle來確保同步。

要直接回答您的問題,獲取全局互斥量的適當位置在Application.Startup方法的覆蓋範圍內,因爲它在方法的開頭(或多或少)被調用,這可以被認爲是等價的到程序Main(當然,它不是一回事,但爲了讓單個實例應用程序就足夠了)。