2013-06-24 3 views
0

У меня есть панель, содержащая активный компонент x для отображения потока камеры. это внешний код. эта панель может запускаться только с помощью STA-потока из-за драйвера камеры.добавление панели для формирования на другую тему

Как я могу показать эту панель на форме, созданной в другом потоке? , например:

[STAThread] 
     public Main() 
     { 

      Panel display = new Panel(); 

      Thread form = new Thread(()=> 
      { 
       Form displayForm = new Form(); 
       displayForm.Show(); 
       displayForm.Controls.Add(display); 
      }); 
      form.Start(); 

      CameraComponent axCamera = new CameraComponent(); //create new camera component active x component 
      display.Controls.Add(axCamera); 
     } 

Но это бросает исключение на: display.Controls.Add(axCamera); исключение: операции Cross-нить не действует: Control «» доступ из потока, отличного от резьбы она была создана.

ответ

0

Вы должны вызвать эту операцию:

Thread form = new Thread(()=> 
{ 
    Form displayForm = new Form(); 
    displayForm.Show(); 
    display.Invoke((MethodInvoker)delegate { displayForm.Controls.Add(display); }); 
}); 

и честно говоря, я не вижу никаких причин, почему вы хотели бы сделать это. Это очень простая и быстрая операция, и вы должны сделать это в потоке пользовательского интерфейса вместо создания нового.

+0

Показанный код представляет собой простую версию действующего кода, в фактическом коде пользователь может создать камеру на разных формах, и все эти панели камер должны находиться в той же самой теме – Jeffnl

+0

А я вижу, в любом случае мое решение должно работать для вас просто отлично :) – gzaxx

+0

Я все еще получаю то же исключение – Jeffnl