Я пытаюсь создать динамически настраиваемый пользовательский контроль в фоновом потоке. Это мой метод, где я создаю новую тему:Вызывающий поток не может получить доступ к этой ошибке объекта
var thread = new Thread(CreateItemInBackgroundThread);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
И это метод CreateItemInBackgroundThread
:
var uc = new MyUserControl();
UserControl item = uc;
AllControls.Add(item);
//Here I am trying to add control to a current Tab
foreach (var currentTab in _allTabs)
{
currentTab.DocumentWindow.Dispatcher.BeginInvoke(new Action(() =>
{
if (tab.DocumentWindow.IsSelected)
{
tempTab = tab;
tempControl = item;
finish = true;
}
}));
}
Это моя отделка свойство
bool finish
{
get { return _finish; }
set
{
_finish = value;
if (_finish)
{
tempTab.AnimatedCanvas.Dispatcher.BeginInvoke(new Action(() => tempTab.AnimatedCanvas.Children.Add(tempControl)));
}
} // Here I get error - The calling thread cannot access this object because a different thread owns it
}
Как я могу избежать этой ошибки и почему эта ошибка произошла?
http://stackoverflow.com/questions/11923865/how-to-deal-with-cross-thread-access-exceptions –
Также почему вы пытаетесь использовать диспетчер какого-то конкретного объекта? Просто используйте 'Application.Current.Dispatcher'. –
Я хочу получить доступ к tempControl, где мой динамически созданный элемент сохранен и помещен в UI, но в моем свойстве у меня всегда есть эта ошибка – Sasha