WPF вызывать из двух потоков - PullRequest
1 голос
/ 28 августа 2011

Я пытаюсь вызвать дважды, а затем еще раз из другого объекта.

public void Show()
{
    if (mainGrid == null)
        return;
    if (!Dispatcher.CheckAccess())
    {
        Dispatcher.BeginInvoke(new ThreadStart(delegate() { Show(); }), DispatcherPriority.Background);
        return;
    }

    mainGrid.Children.Add(rec);
    rec.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
    rec.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;

    mainGrid.Children.Add(this);
    this.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
    this.VerticalAlignment = System.Windows.VerticalAlignment.Center;
}

два объекта B, C наследуют эту функцию от A: при вызове из процессов B.show (), затем B.showStop () из Thread и C.show () я получаю исключение при использовании привилегированного main.children.Add (..) из C.show () Пожалуйста, помогите мне решить эту проблему.

1 Ответ

1 голос
/ 28 августа 2011

Я думаю, что вы должны предоставить больше информации о вашей проблеме, например:

  • какой класс является A (хотя, похоже, это объект пользовательского интерфейса)
  • что такое rec

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

Я не могу точно сказать вам, что происходит с таким небольшим количеством информации, но я думаю, что вы добавляете два элемента управления, которые были созданы в разных потоках, поэтому один из двух Add даст вам исключение.

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