У меня есть приложение, в котором есть сетевой код, который работает асинхронно.Я прикрепил некоторые события, которые будут выброшены, когда нет соединения с сервером, и я создаю некоторую форму «операция не удалась», когда это происходит.Проблема в том, что моя форма висит после создания.Я читал об этом, и я пытался сделать с:
public void ShowView()
{
if (this.InvokeRequired)
{
Action a = new Action(ShowView);
this.Invoke(a);
}
else this.Show();
}
И проблема все еще присутствовала.Затем я обнаружил, что если элемент управления не был создан, InvokeRequired возвращает значение false.Поэтому я при своем коде инициализации добавил:
this.show();
this.hide();
Таким образом, это похоже на работу.Но это довольно уродливо, и когда мое приложение запускается, я на мгновение вижу, как отображается моя форма, а затем исчезает.Как мне создать форму для создания всех элементов управления без ее отображения, или есть какое-то лучшее решение этой проблемы?
РЕДАКТИРОВАТЬ: Дополнительная информация.Я использую шаблон проектирования MVP.У меня есть Ведущий, которые имеют зависимость от IView.Моя форма реализует IView.В IView есть методы ShowView () и HideVIew (), которые я вызываю у своего докладчика.Мой докладчик получает событие из другого потока.Так, где я должен делать этот поток прыжков или как я должен решить это?
EDIT2: Вот пример приложения, иллюстрирующего проблему:
public partial class Form1 : Form
{
Form2 form;
public Form1()
{
InitializeComponent();
form = new Form2();
}
private void button1_Click(object sender, EventArgs e)
{
//form.Show();
//form.Hide();
Thread t = new Thread(new ThreadStart(ShowForm2));
t.Start();
}
private void ShowForm2()
{
if (form.InvokeRequired)
{
Action a = new Action(ShowForm2);
form.Invoke(a);
}
else
{
form.Show();
Thread.Sleep(5000);
}
}
}
Можете ли вы сказать мне по этой конкретной проблеме, что изменить?