-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 スレッドとレンダリング スレッドの 2 つのスレッドから始まります。UI スレッドでユーザー コントロールを作成する必要があります。

于 2013-07-03T13:12:01.300 に答える