本帖最后由 SaRoot 于 2010-08-23 20:44:39 编辑

解决方案 »

  1.   

    资源已释放
    判断是否为null
      

  2.   


    我判断this == null || this.IsDisposed 就return 但,还是会报同样的错误。出现windows提示信息,是否调试或关闭,但这也不是每次都出现。
      

  3.   

    这种判断可能判断一瞬间还是没释放,然后执行Invoke的之前释放了。所以就会出错。
    你可以把invoke的异常处理掉
    try
    {
        invoke(......)
    }
    catch(InvalidOperatorException)
    {
    //skip this exception
    }
      

  4.   

    关闭事件中你在OnClosed还是OnClosing?
      

  5.   


    if (this.richTxtStatus != null && !this.richTxtStatus.IsDisposed)
                {
                    if (this.richTxtStatus.InvokeRequired)
                    {
                        AppendMessageCallBack d = new AppendMessageCallBack(AppendMessage);                    this.Invoke(d, new object[] { message, time });
                    }
                    else
                    {
                        this.richTxtStatus.AppendText(string.Format("##{0}##{1}\r\n", time.ToString("yyyy-MM-dd HH:mm:ss.fff"), message));
                        this.richTxtStatus.ScrollToCaret();
                    }
                }
      

  6.   

    修改后的代码如下:if (this != null && !this.IsDisposed)
                {
                    if (this.richTxtStatus.InvokeRequired)
                    {
                        AppendMessageCallBack d = new AppendMessageCallBack(AppendMessage);                    try
                        {
                            this.Invoke(d, new object[] { message, time });
                        }
                        catch (InvalidOperationException ex)
                        {
                            MessageBox.Show(ex.Message);//这里会抛异常
                        }                }
                    else
                    {
                        this.richTxtStatus.AppendText(string.Format("##{0}##{1}\r\n", time.ToString("yyyy-MM-dd HH:mm:ss.fff"), message));
                        this.richTxtStatus.ScrollToCaret();
                    }
                }
      

  7.   

    我觉得子窗体出现的过程同时也是父窗体释放的时候,当子窗体加载成功后调用this.invoke()就不会出错,如果load事件里用到this.invoke()时就会出错,这说明一个问题,就是load里的this.invoke()调用时父窗体还没有释放完成,我们可以稍等片刻再调用this.invoke();方法就是在this.invoke()前加上一个thread.sleep(300);大于300的也可以,测试了一下,200就不行了,希望对一起学习的新人们有个帮助,大家一起进步.