dispatcherTimer无法正常工作

时间:2014-04-21 13:01:23

标签: c#

我需要每秒拍摄10帧实时相机15分钟。我使用了dispatcherTimer类,但似乎它没有准确地工作。如何使其准确?我甚至没有保存图像,因为它很耗时,我只是将它保存在内存中,但它仍然无法正常工作。 我应该使用其他图书馆吗?

counter01 = new DispatcherTimer();
counter01.Tick += new EventHandler(counter01_Tick);
counter01.Interval = new TimeSpan(0, 0, 0,100); // every 100 milliseconds == 10 frames per seconds

2 个答案:

答案 0 :(得分:2)

MSDN states

  

不保证定时器在时间间隔发生时完全执行,   但是它们保证在时间间隔发生之前不会执行。

您可以查看StopWatch,它可能会对您有所帮助。

答案 1 :(得分:2)

它与可以一样准确。这需要您的UI线程响应,快速调度它获得的任何消息。包括DispatcherTimer生成的“time is up”通知,以及生成Tick事件的通知。

看到DispatcherTimer延迟触发Tick事件处理程序的常见挂断是你有一个firehose问题。换句话说,事件处理程序所需的时间更长比计时器的Interval属性值更长。这样可以按照您期望的方式自行处理,每当您尝试执行的操作超过计算机可以处理的时间,那么无论您尝试做什么,只需稍后运行。

视频中不存在消防问题,一帧可以包含大量数据。典型的hidef视频流以每秒25帧的速度运行,每帧包含1920x1080像素。这是25 x 1920 x 1080 x 3 = 148兆字节/秒。除了解压缩开销之外,您甚至无法以该速率将数据写入磁盘。大多数消费级磁盘驱动器的最高速度为30兆字节/秒,给出或取2倍。将帧速率降低到10 /秒还不足以解决它,仍然是60 MB /秒,你必须采取更激烈的减小框架尺寸等措施。或者使用可以实时压缩视频的优质视频编码器。

这是一个系统性问题,而不是DispatcherTimer问题。使用分析器获得更多洞察力,它可以帮助您识别真正的瓶颈。