2013-06-24 11 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); 異常:跨線程操作無效:控制'從比它創建的線程以外的線程的訪問。

回答

0

你必須調用該操作:

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

,老實說我看不出有任何理由,你爲什麼會想這樣做。這是非常簡單和快速的操作,你應該在UI線程上做,而不是創建一個新的。

+0

顯示的代碼是實際代碼的簡單版本,在實際代碼中用戶可以在不同的窗體上創建相機,並且所有這些相機面板必須位於同一線程上 – Jeffnl

+0

啊我看到了,無論如何,我的解決方案應該可以工作因爲你只是好:) – gzaxx

+0

我仍然得到同樣的異常 – Jeffnl