Winform下摄像头录制视频,想录制1分钟就停止录制,用线程实现,但是这样写界面直接卡死,过了一分钟后界面恢复正常,请各位高手解决一下
 threadvideo = new Thread(new System.Threading.ThreadStart(CaptureVideo));//执行录像线程
                threadvideo.IsBackground = true;//后台线程
                threadvideo.Start();
       private void CaptureVideo()
        {
            if (this.InvokeRequired)
            {
                BeginInvoke(new EventHandler(ThreadVideoOut), null);
                Application.DoEvents();
            }
            else
            {
                ThreadVideoOut(this, null);
            }
        }        private void ThreadVideoOut(object sender, EventArgs e)
        {
                //开始录制视频
                cvideo.StartKinescope(videopath);
                //暂停1分钟                Thread.Sleep(60000);
                //停止录制视频
                cvideo.StopKinescope();
                //视频处理
                FileInfo fi = new FileInfo(videopath);
                string filename = Path.GetFileName(videopath);
                string filetype = Path.GetExtension(videopath);
                double size = Math.Round(fi.Length / (1024 * 1024d), 0);
                string filesize = size.ToString() + "MB";
                string[] name = filename.Split(new char[] { '_' });
                //上传FTP,如果视频容量一直变化,上传不成功
                uploadvideopath = @"ftp://" + IpAddress + videofolderloaction + filename;
                ftpfile.Upload(videofolderloaction, videopath);
          }

解决方案 »

  1.   

    没发现你说的问题,当然也没有测试你的视频代码。也许是你的视频录制代码,把整个cpu都占了,所以假死。如果所有的程序都出现假死现象估计就是我说的那个问题。如果只有你的程序假死,就不是了。
      

  2.   

    private delegate void DlVideo();private void Start()
    {
    DlVideo dv = new DlVideo(Video);
    dv.BeginInvoke(null, null);
    }
    private void Video()
    {
     //开始录制视频
      cvideo.StartKinescope(videopath);
      //暂停1分钟 Thread.Sleep(60000);
      //停止录制视频
      cvideo.StopKinescope();
      //视频处理
      FileInfo fi = new FileInfo(videopath);
      string filename = Path.GetFileName(videopath);
      string filetype = Path.GetExtension(videopath);
      double size = Math.Round(fi.Length / (1024 * 1024d), 0);
      string filesize = size.ToString() + "MB";
      string[] name = filename.Split(new char[] { '_' });
      //上传FTP,如果视频容量一直变化,上传不成功
      uploadvideopath = @"ftp://" + IpAddress + videofolderloaction + filename;
      ftpfile.Upload(videofolderloaction, videopath);
    }
      

  3.   

    你这个不能暂停一分钟吧,而且也有可能上传FTP不成功,一分钟暂停就是为了是视频上传成功
      

  4.   

    CPU全占不至于,我主要是想录制1分钟就停止录制,但是用sleep界面就卡死了
      

  5.   

    不要sleep()可以解决卡死问题但是我想录制一分钟就不能实现,用timer可以嘛?会不会有问题??
      

  6.   

    和下面这样写
    private delegate void DlVideo();
    BeginInvoke(new DlVideo(ThreadVideoOut), null);
           有什么区别?