Как получить доступ к окну из другого потока? - PullRequest
0 голосов
/ 06 августа 2010
    var t = new Thread(new ParameterizedThreadStart(DoWork));
    t.SetApartmentState(ApartmentState.STA);
    t.IsBackground = true;
    t.Start(App.Current.MainWindow);

    public static void DoWork(object owner)
    {
        var progressDlg = new ProgressBarDialog();

        // progressDlg.Owner = (Window)owner; // This doesn't work

        progressDlg.ShowDialog();
    }

Теперь, скажите, пожалуйста, возможно ли заставить его работать?

App.Current.MainWindow в примере не доступно из другого потока.

А также я слышал о новом классном способе Parallel.Invoke (), но я не знаю, подходит ли он для этой ситуации или нет. Я ценю, если вы покажете мне, как это работает.

1 Ответ

0 голосов
/ 06 августа 2010

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

Что-то вроде этого

 Action x = (Action)delegate {
       //do my UI updating
    };
    Dispatcher.Invoke(x, new object[] { });

, это тот же ответ, который я дал здесь ...

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