C# 在编译和处理ObjectDisposedException时打开新窗体,而不知道其System.Type
在使用Windows关闭按钮关闭其中一个窗体后,我在尝试防止ObjectDisposedException时遇到了和问题 我有一个方法负责打开表单,它一直工作到我试图打开“disposed”表单为止,所以我尝试使用try-catch块来处理它,尽管之后无法掌握如何显示表单C# 在编译和处理ObjectDisposedException时打开新窗体,而不知道其System.Type,c#,visual-studio,winforms,C#,Visual Studio,Winforms,在使用Windows关闭按钮关闭其中一个窗体后,我在尝试防止ObjectDisposedException时遇到了和问题 我有一个方法负责打开表单,它一直工作到我试图打开“disposed”表单为止,所以我尝试使用try-catch块来处理它,尽管之后无法掌握如何显示表单 public void FormCheck (Form form) { bool isOpen = false; FormCollection fc = Application.Open
public void FormCheck (Form form)
{
bool isOpen = false;
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
if (frm.Name == form.Name)
{
form.Focus();
isOpen = true;
break;
}
}
if (isOpen == false)
{
try
{
form.Show();
}
catch(ObjectDisposedException)
{
Type formType = form.GetType();
object instance = Activator.CreateInstance(formType);
form.Show();
}
}
}
假设您从未将null传递给该方法(您也可以进行检查):
public void FormCheck(Form form)
{
foreach (Form frm in Application.OpenForms)
{
if (frm.Name == form.Name)
{
form.Focus();
return;
}
}
if (!form.IsDisposed)
{
form.Show();
}
else
{
((Form)Activator.CreateInstance(form.GetType())).Show();
}
}