相关疑难解决方法(0)

IntPtr.Zero相当于null吗?

我试图设置ReadFile为异步运行,根据MSDN,我需要设置lpNumberOfBytesReadnull:

"如果这是一个异步操作,请为此参数使用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
  );
Run Code Online (Sandbox Code Playgroud)

我这样称呼它(意图使第4个参数为null):

Win32API.ReadFile(readHandle, out data_read, Win32API.BUFFER_SIZE, IntPtr.Zero, ref over_lapped);
Run Code Online (Sandbox Code Playgroud)

是否与使用null调用它相同?如果没有,我应该在声明或函数调用本身中更改什么?

我也好奇,如果我应该使用SafeHandleHandleRef代替IntPtrhFile参考?我知道CloseHandle(IntPtr)当我完成它时确保关闭手柄,只是不确定是否有任何其他理由使用其他两个选项IntPtr.我也在努力避免使用不安全的代码.

编辑:事实证明,我不应该设置第四个参数IntPtr.Zero,因为即使我异步运行,它仍然可以立即返回.见异步磁盘I/O.啊,我喜欢自相矛盾的故事.

c# file-io asynchronous

58
推荐指数
3
解决办法
4万
查看次数

标签 统计

asynchronous ×1

c# ×1

file-io ×1