c # одна форма блокирует другую в проекте winform - PullRequest
0 голосов
/ 04 февраля 2009

У меня есть приложение, которое использует 2 формы, основную форму и всплывающую форму, которые используются в следующей конфигурации:

public class MainForm : Form
{
    public MainForm()
    {
       SplashScreen splash = new SplashScreen();

       // configure Splash Screen
    }
}


public class SplashScreen
{
    public SplashScreen()
    {
       InitializeComponent();

       // perform initialization

       this.ShowDialog();
       this.BringToFront();
    }
}

Примечание: основная форма создается со следующим кодом:

Application.Run( new MainForm() );

Проблема выше в том, что конфигурация всплеска не происходит, если всплеск не закрыт с

splash.Close();

только когда это происходит, запускается остальная часть конструктора MainForm. как я могу легко остановить это поведение блокировки?

Ответы [ 4 ]

1 голос
/ 04 февраля 2009

Я уже ответил вам с рабочим примером на другой вопрос, который вы задали для того же:

C # winforms запуска (всплеск) форма не скрывается

1 голос
/ 04 февраля 2009

Как правило, вам нужно показывать заставки в отдельном потоке, и позволить первичному потоку продолжать загрузку. Не тривиально - в частности, вам нужно будет использовать Control.Invoke, чтобы попросить заставку закрыться, когда будете готовы (соответствие потоков) ...

0 голосов
/ 04 февраля 2009

По сути, вы хотите просто показать всплывающую форму, но не позволить ей заблокировать основную форму.

Вот как я это сделал:

class MainForm : Form {

    SplashScreen splash = new SplashScreen();  //Make your splash screen member

    public MainForm()
    {
        splash.Show();  //Just show the form
    }

}

Затем в MainForm_Load вы выполняете инициализацию как обычно.

Теперь, когда ваша форма готова к отображению (MainForm_Shown):

public MainForm_Shown()
{
    splash.Close();
}

Это позволяет вашей MainForm нормально загружаться при отображении заставки.

0 голосов
/ 04 февраля 2009

Используйте splash.Open () вместо splash.OpenDialog (), и этого не произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...