日期:2014-05-17  浏览次数:20889 次

C# 开发摄像头应用程序,录像时出现鼠标是忙碌状态问题如何解决
能拍照,也能录像,就是录像时鼠标是忙碌状态,不能做其它事,一点击鼠标就会停止录像,请各位大神指点一下。

------解决方案--------------------
录像语句后面跟上这句试试
Application.DoEvents();

或者

如果录像没有主界面UI操作和交互的话。直接新开个线程,别让它阻塞UI。
Thread processorThread = new Thread(new ThreadStart(录像函数));
processorThread.IsBackground = true;
processorThread.SetApartmentState(ApartmentState.STA);
processorThread.Start();
------解决方案--------------------
MSDN:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.doevents(v=vs.90).aspx
我以前在程序里加载网页过程中,鼠标操作经常出现程序无响应,加上DoEvents就好一些。

如果video不是窗体控件的话,还是新开一个线程进行录制吧。
------解决方案--------------------
多线程.............
------解决方案--------------------
引用:
Form代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.W……

应该不会..你是否在线程中访问UI线程了?
------解决方案--------------------
/// <summary>
///录像按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
        private void recordC_Click(object sender, EventArgs e)
        {
            video.path=@"d:\1.avi";
            delegateKinescope myK = new delegateKinescope(video.StartKinescope);
          Thread threadKinescope = new Thread(new ThreadStart(myK));
          threadKinescope.Start();
        }

///<summary>
        ///开始录像
        ///</summary>
        ///<param name="path">要保存的录像路径</param>
        public string path;
        public void StartKinescope()

        {
           // byte[] lpszName = new byte[100];
           // byte[] lpszVer = new byte[100];
          //  VideoAPI.capGetDriverDescriptionA(0, lpszName, 100, lpszVer, 100); 
            //string path;
            //path = "D:\\lx.avi";
            IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
            VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt32());
            Video