ActiveX控件'971127bb-259f-48c2-bd75-5f97a3331551'无法实例化,因为当前线程不在单线程单元中

时间:2014-03-15 15:22:49

标签: c# multithreading activex

我正在创建一个rdp应用程序,但我保留上述错误。我尝试在加载方法之前添加[STATHREAD],我尝试过这个:

    [System.STAThread]
    private void rdp_Load(object sender, EventArgs e)
    {
        System.Threading.Thread a = new System.Threading.Thread(rdp_connect);
        a.SetApartmentState(System.Threading.ApartmentState.STA);
        a.IsBackground = true;
        a.Start();
    }

rdp_connect方法:

[STAThread]
        public void rdp_connect()
        {
            axMsRdpClient2a1.Server = mainform.addr;
            axMsRdpClient2a1.UserName = mainform.uname;
            IMsTscNonScriptable enc_connection = (IMsTscNonScriptable)axMsRdpClient2a1.GetOcx();
            enc_connection.ClearTextPassword = mainform.pass;
            try
            {
                axMsRdpClient2a1.Connect();
            }
            catch
            {
                MessageBox.Show("Could not connect.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

我也注意到表单的设计者会在错误发生时显示,但我认为这并不重要。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

你不能将[STAThread]应用于任意方法(嗯,你可以,但它没有做任何事情)。以下是MSDN关于[STAThread]的内容:

将此属性应用于入口点方法(C#和Visual Basic中的Main()方法)。它对其他方法没有影响。要设置您在代码中开始的线程的单元状态,请在启动线程之前使用Thread.SetApartmentState方法。