日期:2014-05-18  浏览次数:21105 次

"对象当前正在其他地方使用":另一个线程已Invoke主窗体的方法更改其Enable属性,还是出现此异常?
我用C#2005做WinForm,在处理长时间的操作时弹出非模式窗口提示操作进程,弹出时将主窗口的Enable暂时设为False以模拟模式窗口效果暂时屏蔽用户操作,关闭时再将Enable设回True;

非模式窗口中的代码:

//显示时
private void Wait_Load(object sender, EventArgs e)
{
  MethodInvoker miMainForm = new MethodInvoker(((ControlEx.MdiForm)parent).SetMainFormReEnable);
  this.Invoke(miMainForm);
}

//关闭时
private void Wait_FormClosing(object sender, FormClosingEventArgs e)
{
  MethodInvoker miMainForm = new MethodInvoker(((ControlEx.MdiForm)parent).SetMainFormReEnable);
  this.Invoke(miMainForm);
}

其中parent即程序主窗体,是主窗体类ControlEx.MdiForm的一个实例;

主窗体类的代码:

//将主窗体的Enable属性设置为反
public void SetMainFormReEnable()
{  
  this.Enabled = !this.Enabled; //就是每运行到这句提示:用户代码未处理 System.InvalidOperationException 对象当前正在其他地方使用
}

我在MdiForm类中没有用到其他线程,请问我的代码问题出在哪里?谢谢各位!

------解决方案--------------------
??
------解决方案--------------------
不用Invoke,直接设置呢??
------解决方案--------------------
没看明白。。。