用colse在线程里好像还存在的说....

解决方案 »

  1.   

    我一般都用Close();
    看你是在编什么咯~~
    Dispose()释放资源,Close()——不…
      

  2.   

    应该用 close()
    由运行库自行管理.直接用Dispose()的话, 好像没有close()好.只是对窗体来说
      

  3.   

    用close()吧。把资源交给CLR管理。
      

  4.   

    在《C#高级编程》中:Close()和Dispose()的区别:Close主要用于指定资源可能以后会再次打开,而Dispose()是一种最终处理,调用Dispose()意味着客户机代码最终会删除这个对象.
      

  5.   

    调用Dispose()时
    会自动先调用Close();
      

  6.   

    有区别吗?
    不是都调用dispose(true or false)吗?
      

  7.   

    dispose连unmanaged code都会释放.
      

  8.   

    对于两个方法都有的对象,
    我一般先调用Close(),最后在finally中调用 Dispose()
      

  9.   


    这个方法是调用 Dispose 时的实际执行代码,其 disposing 参数值为 true。
    protected override void Dispose(bool disposing)
    { Form form1;
    Form[] array1;
    int num1;
    int num2;
    MainMenu menu1;
    MainMenu menu2;
    MainMenu menu3;
    if (disposing)
    {
     this.calledOnLoad = false;
    this.calledMakeVisible = false;
    this.calledCreateControl = false;
    this.ResetSecurityTip(0);
    if (base.Properties.ContainsObject(Form.PropAcceptButton))
    {
     base.Properties.SetObject(Form.PropAcceptButton, null);
     
    }
    if (base.Properties.ContainsObject(Form.PropCancelButton))
    {
     base.Properties.SetObject(Form.PropCancelButton, null);
     
    }
    if (base.Properties.ContainsObject(Form.PropDefaultButton))
    {
     base.Properties.SetObject(Form.PropDefaultButton, null);
     
    }
    if (base.Properties.ContainsObject(Form.PropActiveMdiChild))
    {
     base.Properties.SetObject(Form.PropActiveMdiChild, null);
     
    }
    form1 = ((Form) base.Properties.GetObject(Form.PropOwner));
    if (form1 != null)
    {
     form1.RemoveOwnedForm(this);
    base.Properties.SetObject(Form.PropOwner, null);
     
    }
    array1 = ((Form[]) base.Properties.GetObject(Form.PropOwnedForms));
    num1 = base.Properties.GetInteger(Form.PropOwnedFormsCount);
    for (num2 = (num1 - 1); (num2 >= 0); num2 = (num2 - 1))
    {
     if (array1[num2] != null)
    {
     array1[num2].Dispose();
     
    }
     
    }
    base.Dispose(disposing);
    this.ctlClient = null;
    menu1 = this.Menu;
    if (menu1 != null)
    {
     menu1.CleanupMenuItemsHashtable();
    menu1.form = null;
    base.Properties.SetObject(Form.PropMainMenu, null);
     
    }
    if (base.Properties.GetObject(Form.PropCurMenu) != null)
    {
     base.Properties.SetObject(Form.PropCurMenu, null);
     
    }
    this.MenuChanged(0, null);
    menu2 = ((MainMenu) base.Properties.GetObject(Form.PropDummyMenu));
    if (menu2 != null)
    {
     menu2.Dispose();
    base.Properties.SetObject(Form.PropDummyMenu, null);
     
    }
    menu3 = ((MainMenu) base.Properties.GetObject(Form.PropMergedMenu));
    if (menu3 == null)
    {
     goto L_020E;
     
    }
    if ((menu3.form == this) || (menu3.form == null))
    {
     menu3.CleanupMenuItemsHashtable();
    menu3.Dispose();
     
    }
    base.Properties.SetObject(Form.PropMergedMenu, null);
    return; 
    }
    base.Dispose(disposing);
     
    L_020E:
     return; 
    }// 这个方法是 Close 方法执行的实际代码
    public void Close()
    { object[] array1;
    if (base.GetState(262144))
    {
     array1 = new object[1];
    array1[0] = "Close";
    throw new InvalidOperationException(SR.GetString("ClosingWhileCreatingHandle", array1));
     
    }
    if (base.IsHandleCreated)
    {
     base.SendMessage(16, 0, 0);
     
    }
     
    } 贴出此代码,仅供研究。我也得不出一个绝对的结论。
    我通常的做法,仅调用 Close。