2009-03-12 28 views
8

¿Cómo se borra el hilo principal en C#.C# borrado del hilo principal

que tienen un subproceso de fondo que hace un

Membership.ValidateUser(username, password); 

que luego se copia el principal resultante de nuevo al hilo principal

AppDomain.CurrentDomain.SetThreadPrincipal(Thread.CurrentPrincipal); 

esto funciona bien. Pero, si cierro la sesión, quiero borrar el principal, si lo configuro como nulo, no hace nada Thread.CurrentPrincipal = null; si lo intento y lo puse de nuevo a través

AppDomain.CurrentDomain.SetThreadPrincipal(Thread.CurrentPrincipal); 

consigo el error

Default principal object cannot be set twice. 

¿Alguna idea?

Respuesta

3

El truco para solucionar este era crear una fachada principal y asignar a que el hilo. Luego detrás de él puede cambiar el usuario actual por uno nuevo.

3

No creo que pueda restablecer el principal sin cerrar AppDomain y volverlo a crear. Solo tienes una oportunidad para llamar a SetThreadPrincipal.

Suponiendo que está utilizando su propio objeto principal personalizado que crea después de ValidateUser; probablemente pueda poner un método de "Cerrar sesión" en su principal que restablece su estado interno a un usuario no autenticado.

+0

Ese podría ser el caso. No tengo problema si llamo membership.validateuser en la cadena de distribución un par de veces, siempre escribe otro principal. Tal vez estoy intentando actualizar el principal incorrecto. ¿Alguna idea de qué principal actualiza el Usuario validado? – gimpy

+0

sí, solo recibe una llamada al método SetThreadPrincipal – TheZenker

3

Si solo quiere establecer el principal para su hilo principal, pase una referencia junto con el hilo de fondo y luego establezca el principal con la propiedad CurrentPrincipal.

p. Ej. mainThead.CurrentPrincipal = Thread.CurrentPrincipal.

Cuando haya terminado de configurar que el capital original

Cuestiones relacionadas