0

我正在尝试在基于事件的体系结构中使用 Backgroundworker。

这是后台工作者创建代码:

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

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

        bw.RunWorkerAsync();
    }

计算指标异步:

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 永远不会运行。

我想我只是在后台读取文件。如何使用 backgroundworker 在后台运行 MetricNewFrameReadyEventHandler ?

谢谢

4

0 回答 0