Заставка + Главное окно - PullRequest
       1

Заставка + Главное окно

1 голос
/ 04 ноября 2010

У меня есть приложение на C #, которое сталкивается с проблемами, когда речь идет о многопоточности / фоновых рабочих, когда я использую заставку перед загрузкой главного окна.

мой код выглядит примерно так:

[STAThread]
private static void Main()
{

.. do some stuff

ShowSplash(); // where i show a splash screen and load some stuff

...

В качестве последнего шага ShowSplash я делаю следующее:

new MyCabApplication<MyMainWorkItem, MDIParentForm>().Run(); -- where i load the form through cab.

Проблема в том, что когда я делаю это, я получаю следующее исключение:

Запуск второго цикла сообщений в одном потоке не является допустимой операцией.Вместо этого используйте Form.ShowDialog

Есть идеи, что я могу сделать?

Вот моя функция showplash:

 private static DialogResult ShowSplash(AutoResetEvent controller)
 {
     // create and register splash screen
     splashScreen = new PointSplashScreen();
     Application.Run(splashScreen);
     return DialogResult.OK;
 }

Ответы [ 2 ]

2 голосов
/ 04 ноября 2010

Два решения:

  1. Вместо использования Application.Run, просто создайте новый экземпляр формы и затем вызовите ShowDialog. Переместите new MyCabApplication<MyMainWorkItem, MDIParentForm>().Run(); за пределы заставки после вызова на ShowDialog(). Вы можете проверить свойства экрана Splash, если этот код не всегда должен выполняться.
  2. Вместо Application.Run(Form) используйте Application.Run(ApplicationContext). Вам нужно будет создать новый ApplicationContext и переместить туда свой код.

Решение 1. Проще.

1 голос
/ 04 ноября 2010

Звучит как MyCabApplication расширяется Приложение . Метод Run запускает приложение WinForm, запуская цикл обработки сообщений в окне.

Поскольку вы уже показываете пользовательский интерфейс, цикл сообщений уже запущен, поэтому вы не можете запустить другой. Чтобы отобразить вашу основную форму, создайте новый экземпляр и вызовите Show():

var form = new MainForm();
form.Show();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...