Tôi đã không chắc chắn làm thế nào để trả lời điều này và nhìn vào rất nhiều ví dụ MSDN đặt trở lại giá trị được bỏ qua vì vậy nó không phải là quan trọng hoặc có khả năng xảy ra.
Nhưng điều đó không đủ tốt. Tôi bắn máy ảo của mình lên và tôi mở Reflector để xem mã. ManualResetEvent không có Set nhưng nó kế thừa từ EventWaitHandle. Dưới đây là các mã:
public bool Set()
{
bool flag = Win32Native.SetEvent(base.safeWaitHandle);
if (!flag)
{
__Error.WinIOError();
}
return flag;
}
đâu SetEvent được nhập khẩu từ Kernel32:
[DllImport("kernel32.dll", SetLastError=true)]
internal static extern bool SetEvent(SafeWaitHandle handle);
Các WinIOError() gọi chỉ gọi GetLastWin32Error mà chúng tôi chưa thực sự quan tâm. Về cơ bản, điều này có nghĩa là cho cuộc gọi trả về false, một cái gì đó khá sai sẽ phải xảy ra trong mã nguồn gốc Win32.
Đưa thông tin này cùng với thực tế là mã được lưu trữ trong tài liệu MSDN chính thức bỏ qua giá trị trả về (tại sao không? Bạn sẽ làm gì nếu hạt nhân bị lỗi?) Bạn có thể an toàn bỏ qua nó nếu bạn muốn làm sạch logic của bạn lên một chút hoặc nhận được nó và đăng nhập nó nếu bạn đặc biệt là pedantic.
Nguồn
2010-11-04 01:52:24
Câu trả lời được nghiên cứu kỹ. +1 – spender
Cảm ơn! Đó là một câu hỏi thú vị và nó khiến tôi tò mò. –
Cảm ơn Erik. Lấy cảm hứng từ công việc của bạn, tôi đã làm điều tương tự và mở ra Reflector. Dường như WinIOError() sẽ luôn luôn ném một ngoại lệ cố gắng đại diện cho mã lỗi Win32 trong thế giới .NET, điều này có ý nghĩa - nhưng vẫn không thực sự giải thích tại sao cuộc gọi lại có giá trị trả về! – SoftMemes