MTAThreadの Windows フォーム内でホストする必要がある WPF ユーザー コントロールがあります。また、ソリューションは STAThread と 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());
}
この場合、カウントが増加し、MTAThread で例外がスローされないため、ホストがコントロールに追加されるようになりました。しかし、WPF ユーザー コントロールはレンダリングされません。ただし、STAThread では、「呼び出し元のスレッドはこのオブジェクトにアクセスできません....」という例外をスローしています。
これで何か助けていただければ幸いです。