RDP客户端 - AxHost.InvalidActiveXStateException

时间:2014-12-29 13:27:59

标签: c# winforms activex rdp

我致力于优化我的工作的应用程序,通过RDP到我的服务器的多个连接。那时我想做一个单独的窗体向我展示我的所有服务器。根据我的适当知识 - 我想在我的Windows窗体中以编程方式添加AxMsRdpClient2AxMsTscAxNotSafeForScripting控件。一开始我有一个Form1,我保存我的凭证(IP,USER,PASS)和简单的FOR我试图将ActiveX客户端添加到我的Form2并连接到服务器。

我在这里遇到了问题。让我们看下面的代码。

从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;
        }
    }

UInitializer功能:

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."}

1 个答案:

答案 0 :(得分:4)

在创建其本机窗口之前开始使用ActiveX控件时,会引发InvalidActiveXStateException。直到之后调用ippo.Show();之后才会发生这种情况。在该语句之后移动关键属性赋值和方法调用。