イベント ベースのアーキテクチャで 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 をバックグラウンドで実行するにはどうすればよいですか?
ありがとうございました