Обращение к объекту из другого потока
Появилась кривая задача - использовать ActiveX компонент без формы. Натолкнулся на решение похожей проблемы. У меня получился такой примерно код:
public class C
{
private AxMsRdpClient9NotSafeForScripting rdp;
private Thread thread;
public void B()
{
rdp.Invoke(new MethodInvoker(delegate
{
rdp.Connect();
}));
}
public void A()
{
thread = new Thread((ThreadStart)
delegate
{
Console.WriteLine("I'm from thread");
rdp = new AxMsRdpClient9NotSafeForScripting();
rdp.BeginInit();
rdp.CreateControl();
//прочая инициализация
Application.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start();
}
}
Ну так вот, в методе B выбрасывается исключение "Невозможно вызвать Invoke или BeginInvoke для элемента управления до завершения создания дескриптора окна." Проверяю условия rdp.IsHandleCreated - всегда false. Что делать?
Источник: Stack Overflow на русском