我在测试中有以下代码:
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 handler =(sender,e)=> evt.Set();
当方法第二次重新运行时,using语句肯定重新初始化了evt。我觉得这可能与Resharper Test Runner(Nunit 2.7)有关....
有关如何解决这个问题的想法吗?
由于 杰里米
答案 0 :(得分: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;
}
}
}