Я не был уверен, как ответить на это, и, глядя на множество примеров MSDN, возвращаемое значение Set игнорируется, поэтому это не должно быть важно или может произойти.
Но этого было недостаточно. Я запустил свою виртуальную машину и открыл Reflector, чтобы взглянуть на код. ManualResetEvent не имеет Set, но наследуется от EventWaitHandle, который имеет. Вот код:
public bool Set()
{
bool flag = Win32Native.SetEvent(base.safeWaitHandle);
if (!flag)
{
__Error.WinIOError();
}
return flag;
}
Где SetEvent импортируется из Kernel32:
[DllImport("kernel32.dll", SetLastError=true)]
internal static extern bool SetEvent(SafeWaitHandle handle);
Вызов WinIOError() просто вызывает GetLastWin32Error, который нас не особо волнует. По сути, это означает, что для возврата вызова false в собственном коде Win32 должно было произойти что-то довольно неправильное.
Сопоставив эту информацию с тем фактом, что код, размещенный в официальной документации MSDN, игнорирует возвращаемое значение (почему бы и нет? что вы собираетесь делать, если ядро все равно выйдет из строя?), вы можете спокойно игнорировать его самостоятельно, если хотите очистить свою логику bit или получите его и зарегистрируйте, если вы особенно педантичны.
person
Erik Noren
schedule
04.11.2010