Как исправить «Вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет им». в приложении WPF - PullRequest
1 голос
/ 14 ноября 2011

У меня есть следующий код WPF, и он дает мне исключение в «TextBox t = tabItem.Content as TextBox;» ошибка говорит: «Вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет им». Как я могу исправить исключение?

Привет! * * 1003

private void btnAdd_Click(object sender, RoutedEventArgs e)
{
  RichTextBox statusRichTextBox = new RichTextBox();
  CloseableTabItem tabItem = new CloseableTabItem();
  tabItem.Content = statusRichTextBox;
  tabItem.Header = "New Tab";
  MainTab.Items.Add(tabItem);
  Thread t = new Thread(new ParameterizedThreadStart(worker));
  t.Start(tabItem); 
}


public void worker(object threadParam)
{
  CloseableTabItem tabItem = (CloseableTabItem)threadParam;

  TextBox t = tabItem.Content as TextBox; //exception here
  if (t != null)
    Window1.myWindow1.Dispatcher.BeginInvoke((Action)(() => { t.Text = "THIS IS THE TEXT"; }), System.Windows.Threading.DispatcherPriority.Normal);
}

1 Ответ

3 голосов
/ 14 ноября 2011

Свойства и методы объектов пользовательского интерфейса доступны только в потоке, который создал эти объекты, поэтому при попытке доступа к tabItem.Content в рабочем потоке происходит сбой.

Вместо этого можно сделать следующее:

TextBox t;
Window1.myWindow1.Dispatcher.Invoke(new Action(() => t = tabItem.Content as TextBox));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...