MTAThread에 Windows Form 내부에서 호스팅해야하는 WPF 사용자 정의 컨트롤이 있습니다. 그리고 솔루션은 STAThread와 MTAThread 모두에서 작동해야합니다. 그리고 기술적으로는 프로덕션 환경에서 Apartment State를 변경할 수있는 옵션이 없습니다. 이 카운트는 증가하고 MTAThread 특성에 예외가 발생하지 않기 때문에이 경우ElementHost가 MTAThread에서 작동하지 않습니다.
Program.cs
[MTAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
void Form1_Load(object sender, EventArgs e)
{
Thread t = new Thread(() =>{
host = new ElementHost();
host.Dock = DockStyle.Fill;
uc = new UserControl1();
host.Child = uc;
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
MessageBox.Show(this.Controls.Count.ToString());
//if (this.InvokeRequired)
//{
// this.Invoke((Action)(() => { this.Controls.Add(host); }));
//}
//else
{
this.Controls.Add(host);
}
MessageBox.Show(this.Controls.Count.ToString());
}
는 이제 호스트 제어에 부가된다. 그러나 WPF 사용자 컨트롤은 렌더링되지 않습니다. 그러나 STAThread에서 "호출하는 스레드가이 개체에 액세스 할 수 없습니다."예외가 발생합니다. "
이 Anyhelp는 크게 감사하겠습니다.
빠른 응답을 보내 주셔서 감사합니다. 그러나이 COM 구성 요소가 호스트 시스템에 의해 대리 프로세스로 호출되므로 STAThread로 변경하는 것은 불가능합니다. 그러나, 내 코드를 편집하고 이제는 elementhost가 폼 컨트롤에 추가되었지만 렌더링되지 않습니다 ... – Saqwes