2010-09-09 8 views
5

Je le code suivant dans un test:Comment éviter la poignée Safe a été fermé

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

Maintenant, si je lance le test suivant

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

    LoadIncomeStatementViewModel(); 
    // do something 
} 

La deuxième fois que le LoadIncomeStatementViewModel() est appelée Je reçois un message d'erreur «Le handle sécurisé a été éliminé» à EventHandler handler = (expéditeur, e) => evt.Set();

Sûrement l'instruction using a réinitialisé evt lorsque la méthode est relancée la deuxième fois. J'ai l'impression que cela peut être quelque chose à voir avec le Runner Test Resharper (Nunit 2.7) ....

Des idées sur la façon de contourner ce problème?

Merci Jeremy

Répondre

3

Vous devez supprimer le lien entre le gestionnaire comme ci-dessous. Sinon, dans la deuxième manche, vous receviez la première instance.

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

Cela a résolu mon problème, merci! – joerage

Questions connexes