我只是在窗口表单中添加了一个Elementhost(表单中还有其他一些C#代码)。然后它给了我错误:“调用线程必须是STA,因为许多UI组件都需要此。”我将线程更改为STA,但是它阻止了其他事情...无论如何是否有使ElementHost在不触摸任何其他代码的情况下工作的?

这是我如何更改线程的代码:

public UCClientSummary()
    {
        InitializeComponent();

        Thread thread = new Thread(createElementHost);
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
        thread.Join();


    }

    public void createElementHost()
    {
        ElementHost elementHost = new ElementHost();
        elementHost.Dock = DockStyle.Fill;
        LDControls.ucCell uc = new LDControls.ucCell();
        elementHost.Child = uc;
        this.Controls.Add(elementHost);
    }
有帮助吗?

解决方案

将[Stathread] attribute添加在您的主体前面。我不确定是否在工程之间切换线程公寓状态。

可能是背景工人已经在错误的公寓状态中创建。

Hth

马里奥

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top