Создание сложного WPF-окна в фоновом режиме - PullRequest
1 голос
/ 29 октября 2011

У меня очень сложное окно, созданное с помощью WPF.

Поскольку загрузка занимает очень много времени (около 10 секунд), я хочу создать окно в фоновом режиме после запуска приложения.

Моя оболочка содержит одну кнопку, где будет использоваться это окно, когда пользователь нажимает на него.Идея состоит в том, чтобы загрузить приложение, и эта кнопка отключена.После загрузки мой комплекс будет создан в фоновом режиме.Когда окно создано, я могу включить эту кнопку, и пользователь может использовать ее.

Но очень важно, чтобы приложение не блокировалось, пока окно будет создаваться на фоне.Пользователь должен иметь возможность использовать другие модули в это время.

Кто-нибудь знает способ достижения моей цели?

Возможно, кто-то знает, есть ли еще возможности для достижения этой цели вследующий .NET-Framework 4.5?

Ответы [ 2 ]

0 голосов
/ 29 октября 2011

Вы можете создать окно в фоновом потоке. На что нужно обратить внимание:

  1. Поток должен быть STA и должен быть фоновым потоком, поэтому он будет прерван, если основной поток приложения завершен.
  2. Вы должны сохранить этот фоновый поток живым, иначе вы потеряете окно.
  3. При ссылке на другие элементы графического интерфейса следует использовать Dispatcher.Invoke или Dispatcher.BeginInvoke, если этот элемент графического интерфейса принадлежит другому потоку.

Вот пример для создания окна в фоновом потоке:

        Thread thread = new Thread(() =>
        {
            Window windowInAnotherThread = new Window();
            windowInAnotherThread.Show();
            System.Windows.Threading.Dispatcher.Run();
        }) { IsBackground = true };
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
0 голосов
/ 29 октября 2011

Используйте BackgroundWorker.

Обратите внимание, что вы не можете создать фактическое окно в BackgroundWorker.Окно должно быть создано в потоке пользовательского интерфейса.Но вы можете загрузить все необходимые данные в BackgroundWorker и использовать эти данные из формы после загрузки.

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