2011-10-15 77 views
3

我需要編寫將作爲參數給定某個路徑的程序,並播放位於該路徑中的audiofile。但是當我第二次調用該程序後 - 我需要第一個完成播放文件,然後播放第二個文件,該文件作爲參數傳遞給第二個實例。如果可能的話,如何將第二個參數作爲隊列傳遞給第一個程序實例..?將參數傳遞到先前啓動的程序實例

回答

3

我想您所描述的以下策略: -

  1. 您的應用程序的實例的是開放和公平軌道X.
  2. 用戶雙擊在資源管理器跟蹤Ÿ
  3. Windows啓動您的應用程序實例B,在文件名作爲參數傳遞
  4. 實例B檢測實例的
  5. 實例B發送消息以實例的播放軌道ý
  6. 實例乙關閉
  7. 實例A接收到消息時,停止播放磁道X,並開始播放的曲目ý

顯然,這是方式VLC媒體播放器的作品。如果您嘗試上述操作,則會在當前實例開始播放新曲目之前,看到一個短時間內出現的新VLC進程。

這種非常簡單的跨進程通信可以使用諸如System.Threading.Mutex之類的東西來實現。例如。您可以使用一個互斥體來指示當前正在運行的實例的存在,另一個用於將新軌道名稱傳遞給當前實例。

實際上,this article描述了一些非常相似的東西。

+0

認爲這是即時搜索的方式..謝謝,生病嘗試使用互斥體! – 0x49D1

+1

完成。使用這種消息傳遞機制:http://boycook.wordpress.com/2008/07/29/c-win32-messaging-with-sendmessage-and-wm_copydata/。謝謝你的提示! – 0x49D1

1

我不認爲你需要爲此目的的第二個程序實例。您可以簡單地要求第一個節目在播放完第一個音頻文件後播放新的音頻文件。你可以通過幾種方式實現這一點。

  • 您可以在播放音頻文件的程序中託管WCF服務。它將播放音頻,並將同時收聽WCF服務。發送第二個參數的程序將通過WCF服務傳遞新路徑。

  • 同樣可以使用套接字通信

  • 的第三種方式可能是使用Windows消息隊列。音頻播放器將不斷爲新路徑合併隊列。第二個程序將通過在Windows消息隊列中添加消息來發送新文件路徑

  • 您還可以使用文件進行通信。音頻播放器能夠查找文件和其他程序的變化可以寫路徑,該文件

+0

感謝您的回答,但要求始終將路徑作爲參數發送。關鍵是另一個程序會在某些事件中調用我的one +參數。 – 0x49D1

相關問題