//=================================================================== // アクセサ //=================================================================== /// 監視スタート /// @param[in] processID 監視対象のプロセスID public void Start(UInt32 processID) { // すでに監視中でTaskがまだ生きている場合は何もしない if (this.monitoredDSFs.ContainsKey(processID) && !this.monitoredDSFs[processID].IsCompleted) { return; } var context = SynchronizationContext.Current; // Task生成 var task = new Task(() => { // 監視開始 Debug.WriteLine("Start Task: " + processID, "DSFMonitor"); // 開始前に一回Eventをクリアしておく this.interprocess.CheckErrorEvent(processID); // エラーが起きるまで待機 var dsfErrorOccured = this.interprocess.WaitUntilErrorEventOccured(processID); if (dsfErrorOccured) { context.Post((s) => { // Event: DSFErrorOccured var args = new DSFErrorOccuredEventArgs(processID); var handler = this.OnErrorOccured; if (handler != null) { handler(this, args); } }, null); } // 監視終了 Debug.WriteLine("End Task: " + processID, "DSFMonitor"); }); // 監視中リストに追加 // ValueはIsCompletedであることが保障されているので上書き可能 this.monitoredDSFs[processID] = task; // Taskの実行 task.Start(); }
//------------------------------------------------------------------- /// @copybrief DSFMonitor::OnErrorOccured private void DSFMonitor_OnErrorOccured(object sender, DSFErrorOccuredEventArgs e) { if (!Utilities.IsProcessAlive(e.ProcessID)) { return; } // Event: DSFErrorOccured { var message = string.Format("SCFF DirectShow Filter({0}) has encountered a problem.", e.ProcessID); var args = new ErrorOccuredEventArgs(message, false); var handler = this.OnDSFErrorOccured; if (handler != null) { handler(this, args); } } }
//------------------------------------------------------------------- /// @copybrief DSFMonitor::OnErrorOccured private void DSFMonitor_OnErrorOccured(object sender, DSFErrorOccuredEventArgs e) { if (!Utilities.IsProcessAlive(e.ProcessID)) return; // Event: DSFErrorOccured { var message = string.Format("SCFF DirectShow Filter({0}) has encountered a problem.", e.ProcessID); var args = new ErrorOccuredEventArgs(message, false); var handler = this.OnDSFErrorOccured; if (handler != null) handler(this, args); } }