我想在不同的线程中动态创建自定义usercontrol。我的代码是
var thread = new Thread(() =>
{
var uc = new UserControl05();
UserControl item = uc;
Parallel.ForEach(_allTabs, currentTab =>
{
if (currentTab.DocumentWindow.CheckAccess())
{
if (currentTab.DocumentWindow.IsSelected)
{
//some code
}
}
else
{
currentTab.DocumentWindow.Dispatcher.BeginInvoke(new Action(() =>
{
if (!currentTab.DocumentWindow.IsSelected) return;
if (currentTab.AnimatedCanvas.CheckAccess())
{
currentTab.AnimatedCanvas.Children.Add(item); //here I get error
}
else
{
currentTab.AnimatedCanvas.Dispatcher.BeginInvoke(new Action(() =>
{
currentTab.AnimatedCanvas.Children.Add(item);
}));
}
}));
}
});
});
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Name = "Create Control";
thread.Start();
我收到错误调用线程无法访问此对象,因为另一个线程拥有它。我搜索了解决方案并尝试在那里使用调度程序,但它没有帮助并抛出相同的错误。我理解它正在发生,因为我已经在后台线程上创建了usercontrol但是如何修复它我不知道。
有人能提出什么建议吗?
答案 0 :(得分:0)
WPF Apps以两个线程开始,一个UI线程和一个渲染线程。您必须在UI线程上创建usercontrol。