-2

我想在不同的线程中动态创建自定义用户控件。我的代码是

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();

我收到错误调用线程无法访问此对象,因为不同的线程拥有它。我搜索了解决方案并尝试在那里使用调度程序,但它没有帮助并引发相同的错误。我知道它正在发生,因为我在后台线程上创建了用户控件,但我不知道如何修复它。

有人可以提出一些建议吗?

4

1 回答 1

0

WPF 应用程序从两个线程开始,一个 UI 线程和一个呈现线程。您必须在 UI 线程上创建用户控件。

于 2013-07-03T13:12:01.300 回答