//===================================================================
        // アクセサ
        //===================================================================

        /// 監視スタート
        /// @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);
            }
        }