У меня есть пользовательский элемент управления WPF, который должен размещаться внутри Windows Form в MTAThread. Решение должно работать как с STAThread, так и с 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());
}
В этом случае, сейчас хозяин добавляется к элементу управления, как есть увеличение в счете и не бросать никаких исключений в MTAThread. Но WPF User Control не выполняет рендеринг. Тем не менее, в STAThread он выбрасывает исключение «Calling Thread не может получить доступ к этому объекту ....»
Anyhelp в этом было бы весьма полезно.
Благодарим за быстрый ответ. Тем не менее, переход на STAThread может оказаться невозможным, поскольку этот COM-компонент вызывается суррогатным процессом хост-системой. Тем не менее, я отредактировал свой код, и теперь elementhost добавлен в элемент управления формами, но это не рендеринг ... – Saqwes