Действительно ли возможно закрыть форму, в то время как конструктор выполняется (или просто остановить его показывающий на данном этапе)?
У меня есть следующий код:
public partial class MyForm : Form
{
public MyForm()
{
if (MyFunc())
{
this.Close();
}
}
}
Который добавляет Основной ObjectDisposedException (), здесь:
static void Main()
{
...
// Following line errors
Application.Run(new MyForm());
}
Я попытался проверить результат MyForm как это:
static void Main()
{
...
MyForm frm = new MyForm();
if (frm != null)
{
// Following line errors
Application.Run(frm);
}
}
Но это, кажется, не помогает. Кто-либо может сказать мне путь вокруг этого? Возможно, способ проверить форму, чтобы видеть, существует ли это все еще?
Единственное, что вы могли сделать, это установить флаг для его закрытия в конструкторе, а затем закрыть его в событии Показано
. Конечно, если вы это делаете, имеет смысл переместить код, чтобы определить, нужно ли его закрывать в первую очередь.
Когда вы вызываете Close () в форме, внутренне он удаляет формы и освобождая любые управляемые ресурсы. Когда вы сделаете это:
Application.Run(new MyForm());
Вы, скорее всего, получите ObjectDisposedException. Что вам нужно сделать, так это установить видимость формы через свойство:
Application.Run(new MyForm() { Visible = false });
Просто убедитесь, что вы удалили вызов Close () в конструкторе или даже переместили туда назначение свойства.
Можете ли вы сделать MyFunc статическим? и затем сделать что-то вроде:
static void Main()
{
...
if (MyForm.MyFunc())
{
Application.Run(new MyForm());
}
}
это по сути даст вам тот же контроль над тем, будет ли форма построена или нет?
.