2014-02-09 42 views
0

我在C#中創建音樂播放器。這是一個用C#[WinForms]製作的單實例應用程序。目前爲了使它成爲單一實例,我正在使用以下方法。在單實例應用程序中傳遞數據c#

public static Process PriorProcess() 
    { 
     Process curr = Process.GetCurrentProcess(); 
     Process[] procs = Process.GetProcessesByName(curr.ProcessName); 
     foreach (Process p in procs) 
     { 
      if ((p.Id != curr.Id) && 
       (p.MainModule.FileName == curr.MainModule.FileName)) 
       return p; 
     } 
     return null; 
    } 

現在,每當我們通過一些歌曲給應用程序,如果應用程序已經運行,那麼這首歌路徑傳遞給已經使用SendMessage函數與WM_COPYDATA結構運行實例。它工作正常。但是,當我一起選擇一些歌曲(例如,一次10首歌曲)並按下回車鍵時,會創建第二個10個實例,但它們不會將WM_COPYDATA消息發送到已經運行的實例。

那麼,什麼是使單個實例和處理數據傳遞到已經運行的實例的正確方法。或者,如果任何實例沒有運行,那麼? 我想達到的目的是當有人選擇幾首歌曲,然後按下回車鍵,那麼我怎樣才能加載這些歌曲?

+0

*命名管道*可能? http://www.michaelfcollins3.me/blog/2013/06/10/windows-ipc-using-named-pipes.html – thepirat000

+0

一些例子:http://stackoverflow.com/questions/13806153/example-of-named -pipes – thepirat000

回答

0

最簡單的方法是使用VB類「Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase」,這是一個普通的.NET類。您需要添加到「Microsoft.VisualBasic程序」程序集的引用:

此處理「單實例」的問題,解決了數據傳遞到其他應用:

What is the correct way to create a single-instance application?

相關問題