我在C#做的窗体的一个panel显示视频流,怎么处理能让这个panel在独立的线程中运行,保证视频卡窗体不卡! 10
我的视频显示模块是用VC++做的ActiveX控件,只要能解决问题就成,不管在C++中实现或者C#中实现,最好能给个代码例子,或者参考资料地址,谢谢各位!...
我的视频显示模块是用VC++做的ActiveX控件,只要能解决问题就成,不管在C++中实现或者C#中实现,最好能给个代码例子,或者参考资料地址,谢谢各位!
展开
3个回答
展开全部
1楼其实差不多是这个意思了
思想大体就是:
开始播放时:方法
delegate void ShowInPanel(参数);处理视频数据回调主线程的委托
void ShowInPanel sp;委托实例
StartPlayer()
{
sp= ShowInfo;//委托与主线程的ShowInfo挂起关系
Thread thread=new Thread(new ThreadStrart(ProcessBytes)) ;//新开线程处理视频流
thread.Start()
}
ProcessBytes()
{
//这里处理视频流取得要传给主线程的参数,如果这里卡住,下面的方法还执行不到,肯定不会卡住主界面
this.Invoke(sp);//叫主线程去显示
}
ShowInfo(参数)
{
//主线程根据参数显示视频
}
思想大体就是:
开始播放时:方法
delegate void ShowInPanel(参数);处理视频数据回调主线程的委托
void ShowInPanel sp;委托实例
StartPlayer()
{
sp= ShowInfo;//委托与主线程的ShowInfo挂起关系
Thread thread=new Thread(new ThreadStrart(ProcessBytes)) ;//新开线程处理视频流
thread.Start()
}
ProcessBytes()
{
//这里处理视频流取得要传给主线程的参数,如果这里卡住,下面的方法还执行不到,肯定不会卡住主界面
this.Invoke(sp);//叫主线程去显示
}
ShowInfo(参数)
{
//主线程根据参数显示视频
}
追问
您好,谢谢你建议的思路,我之前也这样试过,但是我的视频处理和显示是在一个方法里,没办法在invoke前处理,
//cp.ActiveX.Init((ushort)cp.VedioPort);//初始化摄像头,包括语音
//cp.ActiveX.OpenCamera(cp.CIP, cp.CPort, cp.CName, cp.CUsername, cp.CPassword);//打开摄像头
Invoke(new readyCamera(CrossThreadCall_Local), new Object[] { cp });
调用上面两个方法时就已经卡了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C#有个backgroundworker可以尝试以下.backgroundworker对thread进行了简单的封装.
追问
好 我试试,谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是不是遇到了 不能在异步线程中调用控件 这个错误。
是的话用委托。使用invoke来做。
是的话用委托。使用invoke来做。
追问
不是的,我就是想实现视频卡的时候,但是主窗体不卡,谢谢!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询