2010-09-09 12 views
5

Ho il seguente codice in un test:Come evitare maniglia di sicurezza è stato chiuso

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

Ora, se ho eseguito il seguente test

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

    LoadIncomeStatementViewModel(); 
    // do something 
} 

La seconda volta la LoadIncomeStatementViewModel() viene chiamato Viene visualizzato un messaggio di errore "L'handle di sicurezza è stato eliminato" a EventHandler handler = (sender, e) => evt.Set();

Sicuramente l'istruzione using ha reinizializzato evt quando il metodo viene rieseguito la seconda volta. Ho la sensazione che questo potrebbe essere qualcosa a che fare con il Runner Test Resharper (Nunit 2.7) ....

Qualche idea su come aggirare questo?

Grazie Jeremy

risposta

3

È necessario scollegare il gestore come di seguito. Altrimenti nella seconda manche stavi ricevendo la prima istanza.

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

Questo ha risolto il mio problema, grazie! – joerage

Problemi correlati