gpt4 book ai didi

c# - 如何避免 Safe handle has been closed

转载 作者:太空狗 更新时间:2023-10-29 23:34:55 25 4
gpt4 key购买 nike

我在测试中有以下代码:

 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) 有关。

最佳答案

您需要取消链接处理程序,如下所示。否则在第二次运行中您将收到第一个实例。

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

关于c# - 如何避免 Safe handle has been closed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com