0

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 では、「呼び出し元のスレッドはこのオブジェクトにアクセスできません....」という例外をスローしています。

これで何か助けていただければ幸いです。

4

1 に答える 1