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); 异常:跨线程操作无效:控制''从创建它的线程以外的线程访问。

4

1 回答 1

0

您必须调用该操作:

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

老实说,我看不出您有任何理由要这样做。这是一个非常简单和快速的操作,你应该在 UI 线程上做而不是创建一个新的。

于 2013-06-24T09:08:45.590 回答