J'essaie de mettre en place ReadFile
pour s'exécuter de manière asynchrone et en fonction de MSDN Je dois définir lpNumberOfBytesRead
a null
:
"Utilisez NULL pour ce paramètre s'il s'agit d'une opération asynchrone afin d'éviter des résultats potentiellement erronés."
Par exemple, si j'ai ce qui suit :
[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
);
et je l'appelle ainsi (avec l'intention que le quatrième paramètre soit nul) :
Win32API.ReadFile(readHandle, out data_read, Win32API.BUFFER_SIZE, IntPtr.Zero, ref over_lapped);
Cela reviendra-t-il à l'appeler avec null ? Si ce n'est pas le cas, que dois-je changer dans la déclaration ou dans l'appel de la fonction elle-même ?
Je me demandais également si je devais utiliser SafeHandle
o HandleRef
au lieu de IntPtr
pour les hFile
référence ? Je sais que je dois m'assurer que je ferme la poignée avec CloseHandle(IntPtr)
quand j'en aurai terminé, mais je ne sais pas s'il y a d'autres raisons d'utiliser les deux autres options plutôt que les deux premières. IntPtr
. J'essaie également d'éviter d'utiliser du code non sécurisé.
EDIT : Il s'avère que je ne devrais pas fixer le quatrième paramètre à IntPtr.Zero
de toute façon, parce que même si je fonctionne de manière asynchrone, il pourrait quand même revenir tout de suite. Voir E/S disque asynchrones . Ahh, j'aime les histoires contradictoires.