2012-11-13 7 views
5

自分のコンピュータでMP3ファイルを作成して、メディアプレーヤーに関連付けました。 エクスプローラでMP3ファイルをダブルクリックすると、明らかにメディアプレーヤーが起動して再生されます。アプリケーションの新しいインスタンス

私の問題 私が飛び出る複数のインスタンスを防ぐことができますが、どのように私は私が起こるしたい何すでに

使用していますインスタンスに新しいインスタンスのファイルパスを転送することができます 私はダブルクリックして曲を...そして私はそれを聞いて 私は別の曲をダブルクリックして 現在の曲は停止し、新しい曲が再生を開始するはずです、アプリケーションの新しいインスタンスをポップアップせずに。

Mutexを使用して、実行中のインスタンスが既に存在するかどうかを確認します。 ファイルパスを取得するにはEnvironment.GetCommandLineArgs()

私が必要とするのは、ファイルのパスを現在のインスタンスに渡すことだけです。これどうやってするの??私はあなたがこのhttp://wpfinstanceawareapp.codeplex.com/

を探していると思う

答えて

3

これをアプリケーションに組み込む必要があります。

ユーザーが2番目の曲をクリックすると、現在のインスタンスがアプリケーションの前のインスタンスを強制終了するか、メッセージを送信する方法が必要です。

これは私にとっては少し汚れているようです。

私はきれいなアプローチは、あなたのメディアファイルに関連付けられている小さなapp_booter.exeを書くことだと思います。メディアファイルをクリックすると、この_app_booter_が起動します。

  1. 実行中のアプリケーションのインスタンスが検索されます。
  2. 現在の曲を停止してこの新しい曲を再生するには、データを送信します。
  3. アプリが実行されていない場合は、コマンドラインでそのアプリを起動するだけです。私はあなたのデータがあるので、上記の記事で述べたWM_COPYDATAアプローチ、またはTCPソケットで十分だと思う Interprocess communication for Windows in C# (.NET 2.0)

あなたはIPCを見てみることができ、この他のexeファイルからアプリケーションデータを送信するにはかなりシンプルで、ちょうどファイルパスと多分コマンドです。

私は2つの別々のexeファイルを保存する方が、以前のインスタンスと通信するためにアプリケーションを構築するよりも簡単でクリーンになると思います。

2

は、最初のインスタンスにコマンドライン引数を渡すことができ、単一インスタンスのアプリケーションのための機能を提供します。

0

Mainでは、ミューテックスを確認した後、引数から曲を取得し、Play(FileInfo filename)イベントを発して曲を再生します。あなたのフォームはこのイベントを処理する必要があります(またはコントローラークラスを改善する)

関連する問題