ElementHost给了我“调用线程必须是STA,因为许多UI组件都需要此。”
-
28-09-2019 - |
题
我只是在窗口表单中添加了一个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
马里奥
不隶属于 StackOverflow