none
winform异步委托:无法访问已释放的对象。对象名:“Form1”。[ RRS feed

  • 问题

  • 步骤是这样的。
    点击一个按钮然后开始异步委托执行一个循环。
    在循环中会访问到界面中的控件,由于是不同线程,需要唤起ui线程。
    public void SetValueFun(string str, string controlid, object form1)
            {
                Form1 f1 = form1 as Form1;
                if (this.InvokeRequired)
                {
                    f1.Invoke(new SetValue(SetValueFun), str, controlid, form1);
                }
                else
                {
                    f1.Controls[controlid].Text = str;
                }
            }
    
    
    

    然后会抱无法访问已释放的对象。对象名:“Form1”。
    该怎么解决?知道问题出在哪,是因为窗体关闭了,但还是在继续执行。
    试过了
    if(f1.isDisposed)
      return;
    还是不行。
    2011年11月7日 6:06

答案

  • dear

    这应该是按下关闭的时后所产生的时间差错误,我目前也是没有好方法,我是在调用Invoke时,使用try..catch來忽略UI更新錯誤


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年11月7日 9:31

全部回复

  • 求帮忙。找了好久资料还是没找到解决方法。
    2011年11月7日 6:31
  • dear

    这应该是按下关闭的时后所产生的时间差错误,我目前也是没有好方法,我是在调用Invoke时,使用try..catch來忽略UI更新錯誤


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年11月7日 9:31