一个小的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);
}
}