首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 在其余线程关闭窗体,为何不能null

2012-10-06 
C# 在其他线程关闭窗体,为何不能null我的意图是将一个窗体作为一个控件,在主窗体显示,在另一Timer线程中关

C# 在其他线程关闭窗体,为何不能null
我的意图是将一个窗体作为一个控件,在主窗体显示,在另一Timer线程中关闭,关闭之后为何窗体对象还是不为null

代码如下:

C# code
//查询            if (w == null)            {                w = new wait();                w.LabelText = "正在查询,请稍候";                w.TopLevel = false; //将子窗体作为控件显示                w.TopMost = true;                w.BringToFront();                w.Location = new System.Drawing.Point(dataGridView.Width / 2 - dataGridView.Location.X - w.Width / 2, dataGridView.Height / 2 - dataGridView.Location.Y);//将子窗体显示在主窗体中间位置,                dataGridView.Controls.Add(w);//将子窗体的父容器设置为datagridview                w.Show();            }


C# code
             /// <summary>        /// 关闭进度窗        /// </summary>        void closewait()        {            if (w != null)            {                w.Close();                w.Dispose();                this.Focus();            }        }

第一次我实例化wait对象后,在Timer里面设置超时事件,时间到了调用closewait关闭窗体,当第二次我想显示wait的时候,if(w==null) 显示w不为null,本来Colse之后肯定会空的么,为什么呢?求解。

[解决办法]
当然不会变成null了,除非你显式设定 w = null。

如你描述的那样,由于在closewait中已经Dispose了w,后续对w的操作将出现异常(ObjectDisposedException)。

[解决办法]
改成这样判断:
C# code
if (w== null || w.IsDisposed){} 

热点排行