gpt4 book ai didi

c# - 在多个线程上运行 COM 组件控件

转载 作者:行者123 更新时间:2023-11-30 22:35:59 24 4
gpt4 key购买 nike

我有一个我们公司的帮助台包,我正试图将其与远程桌面集成。我希望实现的功能之一是能够确定(当您浏览我们的客户列表时)远程桌面连接当前是否可用于所选系统。我使用的库是“Microsoft Terminal Services Control”- (AxInterop.MSTSCLib AxMsRdpClient7)

现在我的问题是我想在一个单独的线程上执行此任务(尝试连接)以防止阻塞 UI(假设我可能同时尝试在多个客户端上进行连接)并且到目前为止不成功。

这是代码的一个想法...

public void AttemptLogin(string password)
{
this._thread = new Thread(LoginAttempt);
this._thread.SetApartmentState(ApartmentState.STA);
this._thread.Start(password);
}


protected void LoginAttempt(object password)
{
AxMsRdpClient7 remoteDesktop = new AxMsRdpClient7();
remoteDesktop.CreateControl();

remoteDesktop.UserName = this._username;
remoteDesktop.Server = this._server;
WireEventHandlers(remoteDesktop);
IMsTscNonScriptable passwordContainer = (IMsTscNonScriptable)remoteDesktop.GetOcx();
passwordContainer.ClearTextPassword = password.ToString();
remoteDesktop.Connect();
}

基本上,如果我在 UI 线程中执行上面的代码并将控件添加到窗体集合中,那么上面的代码将完美运行,但是当我尝试在单独的线程上运行它时,似乎根本没有任何操作发生。 connect() 不会引发异常。没有引发任何事件,似乎什么也没有发生。

我想我希望的是确认我正在尝试做的事情(在线程中运行 COM 组件)是完全可能的,并且非常感谢任何关于可能需要哪些步骤才能让它工作的进一步指导.

最佳答案

好消息是您尝试做的事情是可行的。由于您正在创建 COM 对象并在同一线程中使用它,因此无需担心编码问题。 (如果您开始将 COM 接口(interface)指针传递给另一个线程,则创建该对象的 STA 线程将不得不使用消息泵。)

我没有使用过 MSTSC 控件,但我的猜测是它可能需要在窗口中托管才能工作,即使它是一个隐藏窗口。我会创建一个新表单(在您的后台 STA 线程上),看看是否有帮助。然后您可以尝试隐藏表单,直到您需要显示终端服务客户端。如果您不确定如何在多个线程上使用多个表单,请参阅 Multiple Windows, Multiple Threads

关于c# - 在多个线程上运行 COM 组件控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7198725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com