我正在尝试在基于事件的体系结构中使用 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 ?
谢谢