根据MANUALRESETEVENT(或任何EventWaithandle)上的MSDN文档,Set()和reset()和reset()返回布尔值指标,无论操作是否成功。

在哪些情况下,此调用可以返回错误,如果这样做,我该怎么办?

有帮助吗?

解决方案

我不确定如何回答这个问题并查看许多MSDN示例,设置返回值被忽略了,因此它一定不重要或可能发生。

但这还不够好。我启动了VM,然后打开了反射器以查看代码。 ManualResetevent没有设置,但它从EventWaithandle继承。这是代码:

public bool Set()
{
    bool flag = Win32Native.SetEvent(base.safeWaitHandle);
    if (!flag)
    {
        __Error.WinIOError();
    }
    return flag;
}

从kernel32导入setEvent的地方:

[DllImport("kernel32.dll", SetLastError=true)]
internal static extern bool SetEvent(SafeWaitHandle handle);

WinioError()呼叫仅致电GetlastWin32Ror,我们并不真正在乎。基本上,这意味着要返回false的呼叫,在Win32本机代码中必须发生一些错误的错误。

将此信息与官方MSDN文档中托管的代码忽略返回值的事实(为什么不呢?如果您特别学先,请咬或记录并记录下来。

其他提示

我不确定只有日志错误并继续执行就足够了。 set()的错误结果可以在等待处理程序管理的线程中带来错误的行为。那是多线程...我处理false set()结果的愿景 - 抛出异常,在大多数情况下,这可能是无法接受的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top