2013-07-03 2 views
-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(); 

Я получаю ошибку вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет он. Я искал решение и пытался использовать диспетчер там, но он не помогает и бросает ту же ошибку. Я понимаю, что это происходит потому, что я создал usercontrol в фоновом потоке, но как исправить это, я понятия не имею.

Может кто-нибудь что-нибудь предложить?

+1

Вы не можете создать элемент управления в другом потоке ... –

+0

Есть ли возможность сделать это? Или я должен сделать это только по основной теме? – Sasha

+0

Используйте основной (то есть пользовательский) поток, в котором вы будете использовать элемент управления, вы все равно можете манипулировать им в других потоках через 'Диспетчер'. –

ответ

0

Приложения WPF начинаются с двух потоков, потока пользовательского интерфейса и потока рендеринга. Вы должны создать свой пользовательский контроль в потоке пользовательского интерфейса.

Смежные вопросы