先问一个:错误是在Logo窗口退出的时候发生,还是在主窗口退出的时候?如果我没猜错的话,应该是在主窗口,另外看楼主代码当中有Listview,我推测发生错误的时候Listview当中的数据有特定的内容和结构存放,有可能是在Listview的某些事件代码当中写了某些语句进行处理(Refresh?Paint?……),而Dispose时再调用Listview的这些代码导致出错仅为我的推测,供楼主参考

解决方案 »

  1.   

    楼上太牛了,我的Listview是自己的一个类,继承自ListView,里面的数据也是我的类,集成自ListViewItem(增加了一个对象成员等),但是事件只响应了一个点击事件
    public void lsvWindow_Clicked(object sender, System.EventArgs e)
    里面显示一个窗体出来,但是我出错的时候并没有引发这个事件。Refresh和Paint操作却是没有。PS:错误是在整个程序(也就是主窗体)退出的时候发生的。
      

  2.   

    再问一个:代码当中是否有使用循环或foreach对ListViewItem集合进行某些操作的内容?ArgumentOutOfRangeException异常一般向这个方向去查。如果没有的话,不知道是否和WinForm的Controls加载或撤销有关
      

  3.   

    我的线程是向ListView中添加数据
    public void DisplayParse()
    {
    ...
    while(!MSG_SYSQUIT)
    {
    if(...)
       ListViewItemExt a=new ...
       添加a到ListView
       Sleep(1)
    }
    MSG_DISPQUIT=true;//此行经过跟踪确实执行到了
    }
    我在主窗体的Closing事件中设置MSG_SYSQUIT为真,然后用while等待MSG_DISPQUIT为真,再执行这个添加数据线程的Abort()方法+Join方法主窗体有个时钟控件tmrAuto,这个控件是定时判断ListView的数据量,到达一个数量就删除一部分,删除的时候有lock(listview),主窗体的Closing事件中有this.tmrAuto.Stop();且Stop方法执行在while等待MSG_DISPQUIT为真前。foreach操作没有。我的主窗体就是一个Tab控件,然后每个页里面动态加载了1个ListView,然后向里面显示数据,页也是代码中设置的。
    这些按说没有问题吧
      

  4.   

    请问:是否有这种情况,就是在Debug状态几乎不出错误,但编译后运行文件出错的可能性就大增?
      

  5.   

    不,两种情况都同样出错
    DragDrop 注册失败的错误一点眉目都没有
      

  6.   

    楼主能否描述一下对ListView的删除代码内容?另外,除此之外是否还有对Listview当中数据作过遍历或修改操作的地方?
      

  7.   

    给楼主一个提议:退出前直接给操作ListView的线程一个Abort看看效果怎么样?
      

  8.   

    楼主我模仿你说明的内容写了个下程序,分两个线程处理Listview数据,一个加一个减,加的每妙添加一个,减的每0.1秒检测一次,删除超过的数据,没有发现问题。不过删除是删除最早添加的部分。
      

  9.   

    索引超出范围。必须为非负值并小于集合大小。
    这个问题已经解决了,因为显示这部分我后来放进一个timer里了(原来是线程),所以退出的时候只stop了timer,而上次的timer事件此时还没有执行完,所以导致的这个错误,现在已经解决了。谢谢大家,来者都有分。