wpf 下新线程内刷新image非常慢的问题

hurry2002 hurry2002 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
小弟在做一个视频采集卡的程序,采用的是wpf。新建一个线程读取采集卡内的数据(每帧尺寸:240x320),然后通过Dispatcher往Image控件上画。发现如果Image的控件的尺寸如果比较小(100x100),则刷新的很快,每秒能刷30+帧。但如果把控件拉伸到接近显示屏全屏(80%的面积),则刷新就贼慢,只有6帧/秒左右。
刚开始,以为是采集卡的问题,后来自己写了一个简单的线程(TestThread, 如下),从电脑本地读取固定的图片。发现也是有同样的问题,只能每秒刷新6~7帧。

小弟初学wpf不久,我想里面一定有什么机制我没了解透,还望路过的兄弟们指点指点。谢谢。


private void TestThread(Object obj) {
while (this.mRunning) {

this.imageCapture.Dispatcher.Invoke(new Action(() => {

ImageSource imageSource = new BitmapImage(new Uri(@"d:\\baobao.jpg", UriKind.RelativeOrAbsolute));
this.imageReview.Source = imageSource;

}));
Thread.Sleep(10);
}
}
于此同时,如果我在主线程。例如一个按钮的响应函数内来做一个for循环显示图片的话,计算下来,每秒能显示280张。这是为什么呢?
private void buttonView_Click(object sender, RoutedEventArgs e) {
// 打印开始时间戳
for(int i = 0; i < 1000; i ++){
ImageSource imageSource = new BitmapImage(new Uri(@"d:\\baobao.jpg", UriKind.RelativeOrAbsolute));
this.imageReview.Source = imageSource;
}
// 打印结束时间戳
}
...全文
评论
收藏 已收藏
分享
返回顶部
hurry2002
C# 111,129 成员 642,538 内容