2010-09-09 13 views
5

he el código siguiente en una prueba: se llama¿Cómo evitar la manija de seguridad se ha cerrado

private void LoadIncomeStatementViewModel() 
    { 
     using (var evt = new AutoResetEvent(false)) 
     { 
      EventHandler handler = (sender, e) => evt.Set(); 

      _incomeStatementViewModel.Loaded -= handler; 
      _incomeStatementViewModel.Loaded += handler; 
      _incomeStatementViewModel.LoadDataCommand.Execute(null); 
      evt.WaitOne(); 
     } 
    } 

Ahora bien, si funciono con la siguiente prueba

[Test] 
public void Test() 
{ 
    LoadIncomeStatementViewModel(); 
    // do something 

    LoadIncomeStatementViewModel(); 
    // do something 
} 

La segunda vez que el LoadIncomeStatementViewModel() Aparece el mensaje de error "Se ha eliminado el asa segura" en Manejador de sucesos = (remitente, e) => evt.Set();

Seguramente la instrucción de uso se ha reinicializado cuando el método se vuelve a ejecutar por segunda vez. Tengo la sensación de que esto puede tener algo que ver con el Resharper Test Runner (Nunit 2.7) ....

¿Alguna idea sobre cómo evitar esto?

Gracias Jeremy

Respuesta

3

Se necesitan desvincular el controlador de la siguiente manera. De lo contrario, en la segunda ejecución estarías recibiendo la primera instancia.

private void LoadIncomeStatementViewModel() 
{ 
    using (var evt = new AutoResetEvent(false)) 
    { 
     EventHandler handler = (sender, e) => evt.Set(); 

     try 
     { 
      _incomeStatementViewModel.Loaded += handler; 
      _incomeStatementViewModel.LoadDataCommand.Execute(null); 
      evt.WaitOne(); 
     } 
     finally 
     { 
      _incomeStatementViewModel.Loaded -= handler; 
     } 
    } 
} 
+0

¡Eso resolvió mi problema, gracias! – joerage

Cuestiones relacionadas