四台摄像机采集图像,使用4个pictureBox.BeginInvoke开始线程,四个pictureBox都在一个线程里,所以特别卡,有没有什么方法可以解决这个问题?

解决方案 »

  1.   

    4 个BeginInvoke 已经是4个线程了。你里面处理应该适当的sleep一下。让它们对CPU的请求不要竞争的太激烈。
      

  2.   

    问一下三楼fangxinggood:,我用Thread.CurrentThread.GetHashCode()查了一下,他们都在Control所在的线程上,不在线程池里面这是为什么呀?
    问一下二楼ssp2009:平衡程序指的是什么呀?我是新手,刚开始弄C#一个月
      

  3.   

    我以为你是调用delegate的BeginInvoke
    你说的对,如果是Control.BeginInvoke的只是在UI线程上异步。Invoke和BeginInvoke的委托方法是在主线程,即UI线程上执行的。也就是说如果你的委托方法用来取花费时间长的数据,然后更新界面什么的,千万别在UI线程上调用Control.Invoke和Control.BeginInvoke,因为这些是依然阻塞UI线程的,造成界面的假死。不知道你现在怎么取得图片的。把取得图片放在子线程里,然后最后一部再更新Control。
    比如:Thread thread = new Thread(this.UpdatePicture);private void UpdatePicture()
    {
        // 取得图像(这步可能需要很耗时)
         Action update = (()=>{this.pictureBox1.Image = image};
         this.pictureBox1.Invoke(update, null);
    }
      

  4.   

    回复fangxinggood:正在试您说的方法,如果好使的话,100分全都给您了
      

  5.   

    即时释放内存 试试
    using(OOXX==OOXX)
    {
         OOXX;
    }