主界面有一个timer.一个picturebox.一个按钮触发事件.
程序里面实例化了一个imagelist.
还有一个方法
addframer (bitmap b)
{
imagelist1.images.add(b)
}
用于往imagelist中添加帧一个按钮(butten1)的触发内容是
 timer1.Interval = 40;
 timer1.Enabled = true;
就是让timer1开始工作.timer的内容是
pcbFrame.Image = imageList1.Images[++i];
pcbFrame.Refresh();
就是吧imagelist1中的图片顺序显示在picturebox中addframer 这个方法是始终在工作的.就是吧一个影片中的每个帧都加入到这个控件的imagelist上.
同时也可能在imagelist得到足够多的帧后就触发butten1的事件.这个时候addframer 和timer1应该同时在工作吧?可是为什么每当我触发butten1(手工点按钮)后调试器就停在
 pcbFrame.Image = imageList1.Images[++i];
并且提示
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.但是这个也不是绝对的.有时候不知道怎么就会按照程序流程顺利走下去...按照提示是说内存读写保护.可是为什么会引起这个错误呢?
我用的是 vs 2005

解决方案 »

  1.   

    pcbFrame.Image = (Image)imageList1.Images[++i].Clone();
    试试
      

  2.   

    同样提示.同样错误.
     pcbFrame.Image = (Image)imageList1.Images[++i].Clone();
      

  3.   

    pcbFrame.Image = imageList1.Images[++i//注意i不要越界];
      

  4.   

    i没有越界.矿界如果i越界了也不是这样的提示啊..而且我这个i是从1开始的..所以i必定有东西在.我在调试窗口中明确看到i=1 并且image对象是一个256*256的image
      

  5.   

    i 为1 不代表++i为一
    using System;
    class Test 
    {
       public static void Main() 
       {
          double x;
          x = 1.5;
          Console.WriteLine(++x);
          x = 1.5;
          Console.WriteLine(x++);
          Console.WriteLine(x);
       }
    }
    输出
    2.5
    1.5
    2.5
      

  6.   

    把timer 的 Elapsed代码贴全些
      

  7.   

    hdt(倦怠) 先谢谢您的热心.那么晚了还没睡.估计你也是夜猫子^_^
    我吧整个解决方案打包了.自己写的很少.很容易看.代码简陋.不要见笑.^_^
    pc.xsbip.com/a.rar其实我的主要目的就是捕捉摄像头的帧.吧需要的帧都放入一个imagelist中.然后在特定的时间重现这些帧.本来我是用i++的.但是我以为imagelist的下标是从1开始的.所以我改成++i.但是不管怎么样总要出错.
      

  8.   

    要睡了,明天看看,
    imagelist.images是从0开始的,
    错了今天上班看看,家里上网慢
      

  9.   

    因为在调用这个用户控件的主窗体上也是通过timer来调用addframer 的.我起初也以为是这个问题.但是我试验过先连续调用多次比如100次addframer 后关闭掉主窗体的timer.然后在打开控件的timer也是同样错误.怪载.^_^..