使用AForge.NET打开USB摄像头时遇到弹出框(ShowDialog类型)就会出现主界面(线程)卡死

使用VideoSourcePlayer打开USB摄像头时客户电脑总是卡主线程,例如:摄像头打开状态时去messagebox一下或者ShowDialog一个窗体就会出现无法弹窗窗体或者延迟弹出窗体,视频画面没有任何延迟会卡顿。但是窗体界面中的按钮或者其他事件无法及时响应。

1.使用AForge.net自带的示例程序也一样,主要遇到弹窗主界面(线程)就卡死,排除错误使用的情况;
2.自己的WIN7和WIN10无论配置多烂都不会出现这个情况;
3.有试过可客户电脑重装系统,现象依旧;
4.WIN7用户暂无此问题,初步怀疑时WIN10对线程的的处理方式和WIN7不一样导致。但是只有客户电脑会出现这个现象,自己的win10没有这个情况。且同类连接摄像头的软件在客户电脑上也没有这个现象。

看你描述比较像启动了另外一个线程,在这个线程中打开其他Form或者访问Form中的控件导致的。打开其他Form或者Form控件只能从创建Form的线程中访问,从其他线程打开Form或者访问控件需要Invoke执行委托,试试改成下面的结构

            if (this.InvokeRequired)//从其他线程访问Form控件或者打开新的Form需要委托
            {
                this.Invoke(new Action(() =>
                {
                    //代码
                }));
            }
            else {
                //代码
            }

ShowDialog和MessageBox这两种窗口叫做模态窗口,模态窗口显示的时候主窗体的消息循环是会阻塞掉的,你可以试试用设置窗体TopMost属性为true,然后用Show方法代替ShowDialog。

一般这种情况是主线程太忙了导致无法响应,所以需要把一些耗时比较长的操作不要放在主线程执行