0

イベント ベースのアーキテクチャで Backgroundworker を使用しようとしています。

これは、backgroundworker 作成コードです。

public void CalculateMetrics()
    {
        var bw = new BackgroundWorker
        {
            WorkerReportsProgress = true
        };

        bw.DoWork += CalculateMetricsASync;
        bw.RunWorkerCompleted += OnMetricsCalculated;
        bw.ProgressChanged += MetricsWorkerProgressChanged;

        bw.RunWorkerAsync();
    }

CalculateMetricsASync:

private void CalculateMetricsASync(object sender, DoWorkEventArgs e)
    {
        _feederMetrics = new ReplayFrameFeeder(_skeletonRecordingFilePath);
        _feederMetrics.FrameReady += MetricNewFrameReadyEventHandler;
        _feederMetrics.FeedFinished += MetricFeedFinishedEventHandler;

        _feederMetrics.Start();
    }

_feederMetrics は、Kinect スケルトン フレームに関する情報を保持するファイルを読み取ります。フレームの準備が整うと、FrameReady が起動され、次のコードが実行されます。

MetricNewFrameReadyEventHandler:

private void MetricNewFrameReadyEventHandler(object sender, IEnumerable<Skeleton> skeletons)
    {
        foreach (IMetric metric in _metrics)
            metric.AddSkeletons(skeletons);
    }

ただし、MetricNewFrameReadyEventHandler は実行されません。

バックグラウンドでファイルを読んでいるだけだと思います。バックグラウンドワーカーを使用して MetricNewFrameReadyEventHandler をバックグラウンドで実行するにはどうすればよいですか?

ありがとうございました

4

0 に答える 0