私はまだ読むことを理解していない小さなn00bの質問、多くのStackOverflowの回答。
colorData
変数は、Kinect によって 25 回/秒更新されるバイト配列です。UI コンポーネントはありません。
WriteableBitmap と WritePixels が同じタスクのスレッドで呼び出されたと思いました。しかし、まだ System.InvalidOperationException が発生します。ループごとに新しい WriteableBitmap を作成すると、エラーは発生しません。
WriteableBitmap を効率的に再利用するには、コードをどのように修正すればよいですか?
private async Task DoJob(TimeSpan dueTime, TimeSpan interval, CancellationToken token) {
if (dueTime > TimeSpan.Zero)
await Task.Delay(dueTime, token);
WriteableBitmap bitmap = NewColorBitmap(colorW, colorH);
// Repeat this loop until cancelled.
while (!token.IsCancellationRequested) {
try {
bitmap.WritePixels(
new Int32Rect(0, 0, bitmap.PixelWidth, bitmap.PixelHeight),
colorData, bitmap.PixelWidth * Bgra32BytesPerPixel, 0);
}
catch(Exception ex){
// System.InvalidOperationException:
// The calling thread cannot access this object
// because a different thread owns it.
}
// Wait to repeat again.
if (interval > TimeSpan.Zero)
await Task.Delay(interval, token);
}
}