2010-09-09 5 views
5
geschlossen

ich in einem Test den folgenden Code haben:Wie sicher Griff vermeiden wurde

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

Nun, wenn ich den folgenden Test

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

    LoadIncomeStatementViewModel(); 
    // do something 
} 

Das zweite Mal die LoadIncomeStatementViewModel() ausgeführt wird aufgerufen Ich bekomme eine Fehlermeldung "Safe Handle wurde angeordnet" um EventHandler Handler = (Absender, e) => evt.Set();

Sicherlich hat die using-Anweisung evt neu initialisiert, wenn die Methode das zweite Mal erneut ausgeführt wird. Ich habe das Gefühl, dass dies etwas mit dem Resharper Test Runner (Nunit 2.7) zu tun haben könnte ....

Irgendwelche Gedanken, wie man das umgehen kann?

Dank Jeremy

Antwort

3

Sie müssen wie unter den Handler entkoppeln. Andernfalls erhielten Sie im zweiten Lauf die erste Instanz.

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

Das löste mein Problem, danke! – joerage