2011-08-12 5 views
1

解決策はたくさん検索しましたが、何も見つかりませんでした。私は複数のデバイスからビデオストリームを受信するサーバーアプリケーション(.NET)を持っています。ストリームをデコードして処理するために使用しているライブラリはスレッドセーフではありません。私のライブラリの名前はVideoProcessorクラスの "VideoProcessor"です。イベントハンドラメソッドの一意のオブジェクト名を持つクラスインスタンス化(実行時)

私の主なプログラムでは、デバイスごとにVideoProcessorのインスタンスを作成したいと考えています。私の最初のアプローチは、新しいデバイスのVideoProcessorをインスタンス化する接続イベントハンドラを用意することでした。しかし、複数のデバイスが接続しようとすると、うまく動作しません。以下のコードスニペットを参照してください:

static void HandleVideoConnectionEvent(int port, string deviceId) 
{ 
     VideoProcessor vid = new VideoProcessor(port, deviceId); 

    } 

ご覧のとおり、新しいデバイスが接続するたびに、私はvidを上書きします。私はアイディアを使い果たした。私はVideoProcessorの別のインスタンスを各デバイス用に実行する必要があり、どのインスタンスがどのデバイスに使用されているかを把握しておく必要があります。私の最後の希望は、新しいデバイス接続用の新しいプロセスを生成し、deviceIDとその対応するPIDのリストを維持することです(これは.NETで可能かどうかわかりません)。助けてください。これを行うためのきちんとした方法が必要です。あなたの時間のために非常に前もってありがとう。

よろしくお願いいたします。

+0

あなたはVideoProcessorオブジェクトのプールを手で求めていますか? 次に、ビデオプロセッサタイプのリスト<>を持ち、その中のすべてのオブジェクトを維持します。このプールリストを追跡するマネージャーが必要です。 – Zenwalker

答えて

0

Dictionary classを使用します。

static Dictionary<string, VideoProcessor> processors = 
     new Dictionary<string, VideoProcessor(); 

static void HandleVideoConnectionEvent(int port, string deviceId) 
{ 
    processors.Add(deviceId, new VideoProcessor(port, deviceId)); 
} 

次にあなたがDEVICEIDによってVideoConnectionクラスを検索することができます。以下のような:

もちろん
static VideoProcessor GetVideoProcessor(string deviceId) 
{ 
    return processors[deviceId]; 
} 

、あなたはデバイスIDが既に辞書がユニークキー、またはユニークdeviceIds、および意思を有していなければならない(辞書に存在していないことを確認するように、健全性チェックを行う必要があります

+0

ありがとう、クリストファー!私はあなたの提案を使用しました。 – RH2011

関連する問題