понедельник, 23 ноября 2009 г.

Создание окна из потока отличного от потока диспетчера приложения

Возникла задача, в процессе вызова метода из workflow показать форму для ввода дополнительных данных (для тех, кто не в курсе - workflow выполняются в отдельном потоке, и соответственно если метод вызывается из workflow, он тоже выполняется в этом потоке). Приложение написано на WPF. Привычная последовательность действий:
    public void StartReadFromScala(Guid idWorkflow)
    {
      WndReadFromScala form = new WndReadFromScala();
      form.Show();
    }


* This source code was highlighted with Source Code Highlighter.

Выполнялось, но форма не появлялась :(

Пришлось пойти на следующее ухищрение:
    public void StartReadFromScala(Guid idWorkflow)
    {
      // Создаем форму для ввода данных, но создаем ее в главном потоке
      Application.Current.Dispatcher.Invoke(new NoParamHandler(CreateWndReadFromScala), new object[] { });
    }

    private void CreateWndReadFromScala()
    {
      WndReadFromScala form = new WndReadFromScala();
      form.Show();
    }


* This source code was highlighted with Source Code Highlighter.

А вот теперь все работает ;)

Комментариев нет:

Отправить комментарий