**********100分问题异步委托抱错的问题****************** 本帖最后由 tiandiyuzhou2 于 2011-11-08 09:04:27 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你设置断点 看下 Form1 类 什么时候被销毁的 找下 问题正确地方 Invoke改为BeginInvoke(异步),不推荐这样做所以还是做好同步 恩 我也是不推荐this.Invoke(new SetValue(SetListBox), i);改成=》this.BeginInvoke(new SetValue(SetListBox), i);这样做。不过Invoke的话会抱错,这个问题困扰了我好多天了,还没解决,该怎么解决? google查遍了还是木有解决额。 那就等他执行完了,再关闭窗体。用AutoRestEvent。关闭窗体事件中调用WaitOne方法。FunProc中循环执行完调用Set方法. 实际中 会有循环设置value 这个情况么?你希望退出时,直接退出还是怎么 实际情况是这样的。就是有个范围,然后循环这个范围内的值。然后因为是用了委托的BeginInvoke,所以要访问ui线程上的控件就需要在this.Invoke唤起ui线程。然后在显示控件上的值退出的话我是想不抱异常,正常退出。 可能我问的不准确,换个问法。this.Invoke 会出现几次,在你现在的示例中会多次,因为在循环中。实际中可能只需要一次。处理办法是不一样的。退出的时候 可以强制退出么? 恩 1:退出的时候可以强制退出,也就是用户在处理的时候可以不让它全部处理完就退出。2:invoke会出现几次:现在我的做法是会出现很多次,非哥帮我看下是不是能出现一次,我说下我的思路用户输入开始id,结束id,然后循环这中间的差值。在循环中,根据id去获取数据库中的内容,然后在把内容处理显示到richtextbox上,并把处理结果(是否相同内容,相同内容不处理,不相同内容处理成功)显示到listbox上。由于我用了Delegate.BeginInvoke异步委托执行,所以当要访问控件的时候,需要this.Invoke唤起ui线程。这是我的理解以及我的做法,非哥麻烦看下。 强制退出的办法是System.Environment.Exit(-1);写在窗体的关闭事件中Form_FormClosing,缺点是过于暴力。 在看看有没有柔和点的方法,如果没有的话就只能这样强制退出,或者用Control.beginInvole无视异常了。 如果不用循环结束,这样也可以。int totalCount=0;方法FunProc改成public void FunProc(){ do { Thread.Sleep(100); SetListBox(totalCount); totalCount++; }while(totalCount<5000);}FormClosing事件中totalCount=5000;Thread.Sleep(500); 柔和的办法 就是锁等待.一个好消息,循环 Thread.Sleep(100); 我搞定了. 上午吃饭之前把100改成500 很容易就OK的,但是100就是报错.有个死锁的问题,多次尝试后才明白.具体的方案,我得写篇blog记录下来.你先看你另外的问题吧. 晚些时候 我会回复的. 非哥,我上面的Thread.Sleep(100)是模拟正在处理的时间,实际情况是处理时间,不像上面的例子直接得到i显示在控件上。 恩 那我等你的blog.这两天麻烦你了,谢谢你。 额 错误就是无法访问已释放的对象。对象名:“Form1”。 http://write.blog.csdn.net/postedit/6948702 http://blog.csdn.net/sandy945/article/details/6948702 关于学习的两个大问题,好困扰,求各位大大指点迷津 做一个.net程序员要学习哪些知识? 在引用EXEL后,布署到服务器上后报错.高分求助!!!!! C#调用方法 目标框架4.0降为2.0 工具箱上的ReportViewer不能用 使用C#写oracle存储过程时, select 存储过程该怎么实现啊? HELP~如何CheckedListBox中删除未选定的数据? 求C#的分割SQL语句的方法 来看看吧!好地方!!!!!!! 如何强行删除Active directory? 代码提示是英文,怎么解决啊?VS2008C# 动态生成的多个相同控件,如何实现局部刷新?
this.Invoke(new SetValue(SetListBox), i);
改成=》
this.BeginInvoke(new SetValue(SetListBox), i);这样做。不过Invoke的话会抱错,这个问题困扰了我好多天了,还没解决,该怎么解决?
用AutoRestEvent。关闭窗体事件中调用WaitOne方法。
FunProc中循环执行完调用Set方法.
就是有个范围,然后循环这个范围内的值。
然后因为是用了委托的BeginInvoke,所以要访问ui线程上的控件就需要在this.Invoke唤起ui线程。
然后在显示控件上的值退出的话我是想不抱异常,正常退出。
1:退出的时候可以强制退出,也就是用户在处理的时候可以不让它全部处理完就退出。
2:
invoke会出现几次:
现在我的做法是会出现很多次,非哥帮我看下是不是能出现一次,我说下我的思路
用户输入开始id,结束id,然后循环这中间的差值。
在循环中,根据id去获取数据库中的内容,然后在把内容处理显示到richtextbox上,
并把处理结果(是否相同内容,相同内容不处理,不相同内容处理成功)显示到listbox上。
由于我用了Delegate.BeginInvoke异步委托执行,所以当要访问控件的时候,需要this.Invoke唤起ui线程。这是我的理解以及我的做法,非哥麻烦看下。
如果没有的话就只能这样强制退出,或者用Control.beginInvole无视异常了。
int totalCount=0;
方法FunProc改成
public void FunProc()
{
do
{
Thread.Sleep(100);
SetListBox(totalCount);
totalCount++; }while(totalCount<5000);
}FormClosing事件中
totalCount=5000;
Thread.Sleep(500);
无法访问已释放的对象。
对象名:“Form1”。