【恐怖】窗体的Dispose事件出错,极其诡异 先问一个:错误是在Logo窗口退出的时候发生,还是在主窗口退出的时候?如果我没猜错的话,应该是在主窗口,另外看楼主代码当中有Listview,我推测发生错误的时候Listview当中的数据有特定的内容和结构存放,有可能是在Listview的某些事件代码当中写了某些语句进行处理(Refresh?Paint?……),而Dispose时再调用Listview的这些代码导致出错仅为我的推测,供楼主参考 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼上太牛了,我的Listview是自己的一个类,继承自ListView,里面的数据也是我的类,集成自ListViewItem(增加了一个对象成员等),但是事件只响应了一个点击事件public void lsvWindow_Clicked(object sender, System.EventArgs e)里面显示一个窗体出来,但是我出错的时候并没有引发这个事件。Refresh和Paint操作却是没有。PS:错误是在整个程序(也就是主窗体)退出的时候发生的。 再问一个:代码当中是否有使用循环或foreach对ListViewItem集合进行某些操作的内容?ArgumentOutOfRangeException异常一般向这个方向去查。如果没有的话,不知道是否和WinForm的Controls加载或撤销有关 我的线程是向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,然后向里面显示数据,页也是代码中设置的。这些按说没有问题吧 请问:是否有这种情况,就是在Debug状态几乎不出错误,但编译后运行文件出错的可能性就大增? 不,两种情况都同样出错DragDrop 注册失败的错误一点眉目都没有 楼主能否描述一下对ListView的删除代码内容?另外,除此之外是否还有对Listview当中数据作过遍历或修改操作的地方? 给楼主一个提议:退出前直接给操作ListView的线程一个Abort看看效果怎么样? 楼主我模仿你说明的内容写了个下程序,分两个线程处理Listview数据,一个加一个减,加的每妙添加一个,减的每0.1秒检测一次,删除超过的数据,没有发现问题。不过删除是删除最早添加的部分。 索引超出范围。必须为非负值并小于集合大小。这个问题已经解决了,因为显示这部分我后来放进一个timer里了(原来是线程),所以退出的时候只stop了timer,而上次的timer事件此时还没有执行完,所以导致的这个错误,现在已经解决了。谢谢大家,来者都有分。 求带父窗口句柄的窗口显示函数重载的例子 WCF学习,第四节 关于silverlight Ria server 和 动态Func<T,bool>的问题 请问怎么把dataGridView里面的数据进行,去重 C#winform 问题求教 NAS大家谁知道啊,给点资料吧 C#如何做一个简单的网页浏览器 菜鸟小妹提问,如何绑定TreeView问题! 很实际的问题??? 请教如何让C/S客户端程序可设置HTTP代理访问服务器?急 笨问题: 非常郁闷,WinForm中正常显示的自定义控件无法在WebForm中正常显示!
public void lsvWindow_Clicked(object sender, System.EventArgs e)
里面显示一个窗体出来,但是我出错的时候并没有引发这个事件。Refresh和Paint操作却是没有。PS:错误是在整个程序(也就是主窗体)退出的时候发生的。
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,然后向里面显示数据,页也是代码中设置的。
这些按说没有问题吧
DragDrop 注册失败的错误一点眉目都没有
这个问题已经解决了,因为显示这部分我后来放进一个timer里了(原来是线程),所以退出的时候只stop了timer,而上次的timer事件此时还没有执行完,所以导致的这个错误,现在已经解决了。谢谢大家,来者都有分。