IntPtr.Zero эквивалентно нулю?
Я пытаюсь настроитьReadFile
работать асинхронно и в соответствии сMSDNМне нужно установитьlpNumberOfBytesRead
вnull
:
«Используйте NULL для этого параметра, если это асинхронная операция, чтобы избежать потенциально ошибочных результатов».
Например, если у меня есть следующее:
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool ReadFile(
IntPtr hFile,
out byte[] aBuffer,
int cbToRead,
IntPtr cbThatWereRead,
ref OVERLAPPED pOverlapped
);
и я называю это так (с намерением иметь нулевой 4-й параметр):
Win32API.ReadFile(readHandle, out data_read, Win32API.BUFFER_SIZE, IntPtr.Zero, ref over_lapped);
это будет то же самое, что назвать его с нулем? Если нет, что я должен изменить в объявлении или в самом вызове функции?
Мне также было любопытно, если я должен использоватьSafeHandle
или жеHandleRef
вместоIntPtr
дляhFile
ссылка? Я знаю, чтобы убедиться, что я закрываю ручку сCloseHandle(IntPtr)
когда я закончу с этим, просто не уверен, есть ли какая-либо причина использовать другие два варианта надIntPtr
, Я также пытаюсь избежать использования небезопасного кода.
РЕДАКТИРОВАТЬ: Как оказалось, я не должен устанавливать четвертый параметр вIntPtr.Zero
во всяком случае, потому что, хотя я бегу асинхронно, он все равно может вернуться сразу же. ВидетьАсинхронный дисковый ввод-вывод, Ах, я люблю противоречивые истории.