0

問題があります。単純なパラメーターを ac# フォーム アプリとして受け取るビデオ プレーヤーが必要です。プログラミングをよりよく理解するための実験として、アプリのインスタンスを 1 つだけ実行して、open コマンドが指定された場合に新しい引数で更新するようにします。信号を受信したときに refreshVideo() などを実行するようにプログラムできます。

疑似例:

//app is started from cmd line

//open app for first time
vidViewer.exe("lotr.avi", "44:44");

//keep instance open but have it refresh with new movie
vidViewer.exe("star_wars.avi", "22:32")

現状では、ビデオ プレーヤーが埋め込まれた新しいアプリが開くので、十分な数の引数を渡せば、100 回のフリックを開くことができます。一つに留めておきたいと思います。

必要に応じて、より多くの情報を提供できます。

みんなありがとう、ケビン

4

1 に答える 1

1

私の提案は、起動時に相互に排他的なシステム リソースを取得しようとする (つまり、最初のインスタンスのみが成功する) ようにアプリケーションを設計することです。このシナリオでは、プロセス間通信の手段 (新しいビデオの名前と開始時刻を送信するため) も必要になるため、これを実現するために同じメカニズムを使用できます。

たとえば、各アプリケーション インスタンスが開始時に登録を試みる、固定 TCP ポートにバインドされたセルフホステッド WCF サービスを使用できます。ポートの動作方法により、最初のインスタンスのみが成功します。後続のインスタンスは、「ポートは既に使用されています」という例外で失敗します。

  • インスタンスが WCF サービスの登録に成功した場合は、それを「主要な」インスタンスと見なして、そのインスタンスでビデオを再生することができます。ただし、WCF サービスからの受信メッセージをリッスンし、それに応じて再生中のビデオを更新する必要があります (以下を参照)。

  • インスタンスがポートが既に使用されていることを検出した場合、別のインスタンスが既に実行されていると想定する必要があります。次に、再生する新しいビデオの名前と開始時刻を WCF サービスに送信する WCF クライアントを初期化します。最後に、プリンシパル インスタンスがビデオの再生を処理すると仮定して、ウィンドウを表示せずに終了する必要があります。

于 2012-05-29T19:51:44.660 に答える