Esta excepción significa que el subproceso que posee el Grupo (que se añade el Panel) se ha inicializado utilizando el modelo de enhebrado MTA. El sistema de arrastrar/soltar requiere que la cadena de llamada utilice el modelo de cadena STA (en particular, requiere que COM se inicialice a través de OleInitialize). Los modelos de subprocesamiento son un vestigio desafortunado de COM, un predecesor de la plataforma .NET.
Si tiene el atributo [STAThread]
en su función Principal, entonces el hilo del programa principal ya debería ser STA. La explicación más probable, entonces, es que esta excepción está sucediendo en un hilo diferente. Observe la ventana de subprocesos en Visual Studio (Debug | Windows | Threads) cuando se produce la excepción y vea si está en un hilo que no sea el hilo principal. Si es así, la solución es probablemente tan simple como establecer el modelo de rosca para que el nuevo hilo, que se puede hacer de la siguiente manera (añadir este código al hilo donde se está creando el control):
Thread.CurrentThread.SetApartmentState(ApartmentState.STA)
(Thread
y ApartmentState
son miembros de System.Threading
)
Ese código tendrá que suceder antes de que realmente inicie el nuevo hilo. Como señaló @Tomer, también puede especificar esto declarativamente utilizando el atributo [STAThread]
.
Si encuentra que la excepción se está produciendo en el hilo principal, publique de nuevo y avísenos, y tal vez podamos ayudarlo más. Una traza de pila en el momento de la excepción puede ayudar a rastrear el problema.
Si usted no quiere que quejarse con ajuste de forma manual, puede también ponga el atributo [STAThread] en el método de la secuencia. –