多线程情况下winform被自动dispose问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 13:12:34
我的程序类似模型是这样的
static class Program
{
public static Form AForm;
public static Form BForm;

public static Main()
{
AForm=new Form();
BForm=new Form();
Application.Run(AForm);
}
}

所以先出现的是AForm

在AForm中有个按钮,点一下以后执行
Program.AForm.Hide();
Program.BForm.Show();

然后我在BForm中点击一个按钮,其中使用this.Invoke调用一个比较长时间的多线程方法。

该方法结束时会刷新很多BForm中的控件,但是当时间比较长,或者说内存操作比较多的时候(问题有的时候能触发,有的时候又不能触发,这点就不明白为什么了)。

在多线程执行完成之后,在设置BForm界面控件时,在Program类的Application.Run(AForm);这行语句就会报空引用异常,检查以后好像是AForm.IsDisposed值是true。

想请问这种问题应该怎么解决?是不是两个窗体的切换设计有问题?

问题有的时候能触发,有的时候又不能触发...
方法加上lock 试试 多线程运行加载的类 都要重新创造新的
NUll异常 估计被GC回收了
Hide调用的Visible方法 Visible方法最后会调用GC的
具体原因 还是要多调试调试 调戏多了原因就出来了