valida tuvo traves thread subprocesos sirve que para operacion net make how hilos form false cross control checkforillegalcrossthreadcalls calls acceso c# .net multithreading com

c# - tuvo - Ejecutar controles de componentes COM en mĂșltiples hilos



thread c# windows form (1)

La buena noticia es que lo que intentas hacer es posible. Como está creando el objeto COM y usándolo en el mismo hilo, entonces no hay problemas de clasificación de los que preocuparse. (Si comienza a pasar punteros de interfaz COM a otro subproceso, el subproceso STA que creó el objeto debería usar una bomba de mensajes).

No he usado el control MSTSC, pero creo que es necesario que esté alojado en una ventana antes de que funcione, incluso si se trata de una ventana oculta. Crearía un formulario nuevo (en el hilo STA de fondo) y vería si eso ayuda. A continuación, puede intentar ocultar el formulario hasta que necesite mostrar el cliente de servicios de terminal. Si no está seguro de cómo tener múltiples formularios en múltiples hilos, vea Múltiples ventanas, múltiples hilos

Tengo un paquete de asistencia técnica para nuestra empresa que intento integrar con Remote Desktop. Entre las funcionalidades que busco implementar está la capacidad de determinar (mientras navega por la lista de nuestros clientes) si una conexión de escritorio remota está actualmente disponible para el sistema seleccionado. La biblioteca que estoy usando es "Microsoft Terminal Services Control" - (AxInterop.MSTSCLib AxMsRdpClient7)

Ahora mi problema es que quiero realizar esta tarea (intentar una conexión) en un hilo separado para evitar el bloqueo de la IU (dado que podría estar intentando establecer una conexión con numerosos clientes al mismo tiempo) y hasta ahora no ha tenido éxito.

Aquí hay una idea del código ...

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(); }

Básicamente, el código anterior funciona perfectamente si lo estoy ejecutando en el hilo de la interfaz de usuario y agrego el control a la colección de formularios, pero cuando intento ejecutar esto en un hilo separado, parece que simplemente no se producen acciones. No se generan excepciones en connect (). No se generan eventos y parece que no pasa nada.

Creo que lo que espero es la confirmación de que lo que estoy intentando hacer (ejecutar un componente COM en un hilo) ES INFACT POSSIBLE y cualquier otra guía sobre los pasos necesarios para que esto funcione será muy apreciada.