【发布时间】:2014-05-10 08:19:46
【问题描述】:
我正在开发一个 WinRT C# 应用程序。我有一个每秒引发 15-30 次的事件。这个事件为我提供了一个字节数组参数(实际上是字节[]中的一个图像):
void FrameArrived(object sender, byte[] pixels)
{
// 1. Create a bitmap and render it on an <Image> element (UI thread).
DisplayBitmap(pixels);
// 2. Pass the byte array to a method for video recording.
RecordBitmap(pixels);
}
DisplayBitmap 和 RecordBitmap 都是繁重的进程,并且 UI 会变慢。
如果我只调用其中一种方法,一切正常。
请记住,此事件每秒引发 15-30 次。
我需要一种方法来并行运行这两种方法。我尝试过使用 Dispatcher、Parallel.Invoke 和 ThreadPool,但效果不佳。
提前谢谢你。
【问题讨论】:
-
这两个都只是从字节数组中读取吗? FrameArrived 完成后,字节数组是否会被重用/变异?大概 DisplayBitmap 需要在 UI 线程上,但 RecordBitmap 不需要?
-
嗨乔恩。字节数组仅用于显示位图,也由录像机处理。 FrameArrived 完成后我不需要它。 DisplayBitmap 在 Image UI 元素上呈现位图,所以我猜它必须在 UI 线程上运行。其实,我不在乎,只要结果足够顺利:)
-
为什么不直接将“RecordBitmap”传递给后台线程(Task.Factory.StartNew 或类似线程)?
-
如果我理解正确的逻辑,您应该保持 DisplayBitmap 原样并让 RecordBitmap 将像素数组推送到线程安全列表中。然后让另一个线程只处理列表中的项目。这将使像素阵列的记录保持有序。
-
McGarnale:我已经这样做了,虽然 UI 线程变慢了。乔恩:您能否详细说明您的解决方案或给我一个使用示例?非常感谢大家:-)
标签: c# parallel-processing windows-runtime windows-store-apps