Entspricht IntPtr.Zero null?

Ich versuche mich einzurichtenReadFile asynchron und entsprechend laufenMSDNMuss ich einstellenlpNumberOfBytesRead zunull:

"Verwenden Sie NULL für diesen Parameter, wenn dies eine asynchrone Operation ist, um möglicherweise fehlerhafte Ergebnisse zu vermeiden."

Zum Beispiel, wenn ich Folgendes habe:

  [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
  );

und ich nenne es so (mit der Absicht, dass der 4. Parameter null ist):

Win32API.ReadFile(readHandle, out data_read, Win32API.BUFFER_SIZE, IntPtr.Zero, ref over_lapped);

Ist das dasselbe, als würde man es mit null bezeichnen? Wenn nicht, was soll ich in der Deklaration oder im Funktionsaufruf selbst ändern?

Ich war auch neugierig, ob ich verwenden sollteSafeHandle oderHandleRef anstattIntPtr für diehFile Referenz? Ich muss sicherstellen, dass ich den Griff mit schließeCloseHandle(IntPtr) Wenn ich damit fertig bin, bin ich mir nicht sicher, ob es einen anderen Grund gibt, die beiden anderen Optionen zu verwendenIntPtr. Ich versuche auch nicht, unsicheren Code zu verwenden.

EDIT: Wie sich herausstellt, sollte ich den vierten Parameter nicht auf einstellenIntPtr.Zero Auf jeden Fall, denn obwohl ich asynchron laufe, könnte es immer noch sofort zurückkehren. SehenAsynchrone Festplatten-E / A. Ahh, ich liebe es, Geschichten zu widersprechen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage