Клиент RDP — AxHost.InvalidActiveXStateException

Я работаю над приложением, которое оптимизирует мою работу, с множественным подключением по RDP к моим серверам. В этот момент я хотел бы сделать единую форму окна, которая показывала бы мне все мои серверы. С моими соответствующими знаниями я хотел бы программно добавить элемент управления AxMsRdpClient2 или AxMsTscAxNotSafeForScripting в мою форму Windows. В начале у меня есть форма 1, в которой я сохраняю свои учетные данные (IP, ПОЛЬЗОВАТЕЛЬ, ПАРОЛЬ), и с помощью простого FOR я добавляю клиент ActiveX в свою форму 2 и подключаюсь к серверам.

А вот у меня проблема. Давайте посмотрим мой код ниже.

вызов из Form1() >

var btt = new RunRDP();
    for (int i = 0; i < 15; i++)
    {
        btt.PozitionMaster();
    } 

Класс RunRDP:

private static int _count;
private static int _row = 4;
private static int _colum = 4;
private static int _objId;

public void PozitionMaster()
    {
        if (_count != 6)
        {
            UInitializer(_objId++, _row, _colum);
            _row += 196;
            _count++;

        }
        else
        {
            _colum += 196;
            _row = 4;
            _count = 0;
        }
    }

Функция инициализатора:

public AxMsRdpClient2 rdpClient;

        public void UInitializer(int id, int x, int y)
        {
            Form2 ippo = new Form2();
            rdpClient = new AxMsRdpClient2();

            rdpClient.UserName = "username";
            rdpClient.Server = "192.168.0.100";
            rdpClient.Height = y;
            rdpClient.Width = x;

            rdpClient.BeginInit();
            rdpClient.CreateControl();


            if (ippo.InvokeRequired)
            {
                ippo.Invoke(new Action(() => ippo.Controls.Add(rdpClient)));
                ippo.Invoke(new Action(() => ippo.Update()));
            }
            else
            {
                ippo.Controls.Add(rdpClient);
            }

            //this.Controls.Add(rdpClient);

            rdpClient.AdvancedSettings2.RDPPort = 3389;
            rdpClient.AdvancedSettings2.ClearTextPassword = "hello_rdp";//     
            rdpClient.ColorDepth = 16;//     
            rdpClient.FullScreen = false;//     

            rdpClient.Connect();    
        }

получить эту ошибку:

    An unhandled exception of type 'System.Windows.Forms.AxHost.
InvalidActiveXStateException' occurred in AxInterop.MSTSCLib.dll

{"Exception of type 'System.Windows.Forms.AxHost+InvalidActiveXStateException' was thrown."}

person Johnny    schedule 29.12.2014    source источник


Ответы (1)


InvalidActiveXStateException возникает, когда вы начинаете использовать элемент управления ActiveX до создания его собственного окна. Этого не произойдет до тех пор, пока после вы не вызовете ippo.Show(); Переместить критические назначения свойств и вызовы методов после этого оператора.

person Hans Passant    schedule 29.12.2014
comment
Спасибо! Это было решением для меня! - person Shahab; 13.02.2016