直接录像的时候鼠标会变成漏斗,多线程也是漏斗?哪里除了问题?谢谢。
        /// <summary>
        /// 开始录像
        /// </summary>
        /// <param name="path">保存路径</param>
        private void VideoBegin(string path)
        {
            SaveVideoFileDialog = new SaveFileDialog();
            SaveVideoFileDialog.FileName = DateTime.Now.ToString("yyyyMMddhhmmss");
            SaveVideoFileDialog.Filter = "*.avi|*.avi";
            if (SaveVideoFileDialog.ShowDialog() == DialogResult.OK)
            {
                StartThread();
            }
            this.Cursor = Cursors.Arrow;        }        private void btnSaveVideo_Click(object sender, EventArgs e)
        {
            try
            {
                sum = 0;
                StopThread();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        /// <summary>
        /// 保存录像
        /// </summary>
        private void VideoSave()
        {
            // MainForm.SendMessage(hwndc, WM_CAP_STOP, 0, 0);
            StopThread();
        }        public void ThreadStartVideo()
        {            //由于多线程会不断的循环这个执行录像,所有有个标识来判断
            // if (Video && timerThread != null && sum == 2)
            if (timerThread != null && sum == 1)
            {
                //保存录像
                SendMessage(hwndc, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, SaveVideoFileDialog.FileName);
                //到了这里就会卡,多线程应该不会卡住才对啊??
                SendMessage(hwndc, WM_CAP_SEQUENCE, 0, 0);            }
            sum += 1;
        }        /// <summary>
        /// 更新线程
        /// </summary>
        public void UpdataThread()
        {
            try
            {
                //在对控件的调用方法进行调用时,或需要一个简单委托又不想自己定义时可以使用该委托。
                MethodInvoker mi = new MethodInvoker(this.ThreadStartVideo);
                while (true)
                {                    //在创建控件的基础句柄所在线程上异步执行指定的委托
                    this.BeginInvoke(mi);
                    Thread.Sleep(10);                }
            }
            catch (ThreadInterruptedException)
            {
                //针对具体问题定制异常抛出显示
            }
            finally
            {
                //做一些处理
            }
        }        /// <summary>
        /// 启动线程
        /// </summary>        
        public void StartThread()
        {
            StopThread();
            timerThread = new Thread(new ThreadStart(UpdataThread));
            //获取或设置一个值,该值指示某个线程是否为后台线程。
            timerThread.IsBackground = true;
            timerThread.Start();
            Video = false;
        }        /// <summary>
        /// 停止线程
        /// </summary>
        public void StopThread()
        {
            if (timerThread != null)
            {
                MainForm.SendMessage(hwndc, WM_CAP_STOP, 0, 0);
                Video = true;
                //中断线程
                timerThread.Interrupt();
                //杀死进程
                timerThread.Abort();
                timerThread = null;
            }
        }