代码之家  ›  专栏  ›  技术社区  ›  SoftMemes

ManualResetEvent.Set()何时可以返回false?

  •  8
  • SoftMemes  · 技术社区  · 14 年前

    根据MSDN文档,ManualResetEvent(或任何EventWaitHandle)上的Set()和Reset()返回一个布尔指示器,指示操作是否成功。

    2 回复  |  直到 14 年前
        1
  •  19
  •   Erik Noren    14 年前

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

    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()调用只是调用我们并不关心的GetLastWin32Error。基本上这意味着调用要返回false,在Win32本机代码中必须发生一些非常错误的事情。

    将这些信息与官方MSDN文档中托管的代码一起放在一起会忽略返回值(为什么不呢?如果内核失败了,你该怎么办?)如果你想整理一下你的逻辑,你可以自己忽略它,如果你特别学究的话,你可以把它记录下来。

        2
  •  0
  •   Kirill Rafalson    13 年前

    推荐文章