2010-09-09 62 views
5

我已經在測試下面的代碼:)如何避免安全手柄已經關閉

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

現在,如果我運行下面的測試

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

    LoadIncomeStatementViewModel(); 
    // do something 
} 

第二次LoadIncomeStatementViewModel(被稱爲我得到一個「安全處理已處理」錯誤消息,在 EventHandler處理程序=(發件人,e)=> evt.Set();

當第二次重新運行該方法時,肯定會使用using語句重新初始化evt。我有一種感覺,這可能與Resharper Test Runner(Nunit 2.7)有關......

有關如何解決此問題的任何想法?

感謝 傑里米

回答

3

您需要取消鏈接如下處理程序。否則,在第二輪運行中,您將收到第一批實例。

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

這解決了我的問題,謝謝! – joerage 2013-01-11 17:26:05