2011-08-01 59 views
4

我有一個WPF應用程序,它與自定義文件類型相關聯。使文件在當前WPF應用程序中打開

的步驟是:
1.打開項目屬性 - >發佈 - >選項 - >文件關聯
2.填充在擴展= .tr2,描述= TR2文件,程序id = TR2File.tr2,圖標= W32 .ico
3.打開一個空白文本文件,將其重命名爲test.tr2,雙擊它並啓動程序。
4.創建第二個文件,命名爲test2.tr2,雙擊它,我的程序的第二個實例啓動。

現在,我還沒有想出如何實際打開/讀取文件,但首先我真的想讓它如此,如果程序已經運行,那麼它只是在當前應用程序打開,並不會嘗試打開該應用的新實例。

回答

4

讓程序創建一個named pipe。當第二個實例執行時,在它做任何事之前,讓它檢查這個命名管道的存在。如果存在,打開它並使用它發送在第二個實例中打開的文件名,然後終止。如果它不存在,則您沒有現有實例,因此可以打開。

+0

這工作出人意料的好......一旦你想退出程序,你如何關閉所有的管道線程? – AndyD273

+0

你可以讓任何線程簡單地退出它們自己的執行循環 - 當線程的函數退出時,線程終止。通常,您需要像shouldExit這樣的類字段,並在其訪問權限周圍使用lock {}。但是,如果您想要懶惰,則可以調用System.Environment.Exit來立即終止所有內容。 –

+1

因此,爲了將來的參考,這裏是我想出的解決方案:線程沒有進入循環,而是在'pipeServer.WaitForConnection()'命令暫停,這意味着它不會響應任何shouldExit命令。所以我決定給它一個連接並使用它來打破循環並中止線程。因此,在程序關閉事件中,我添加了PipeClient.PipeClientMain({「」,「ThreadCancel」})',並在管道服務器中放置一個if語句,以關閉管道並中止該線程。 – AndyD273

相關問題