我使用FindFirstPrinterChangeNotification / FindNextPrinterChangeNotification方法使用C#中的P / Invoke监视打印机。
我已经彻底阅读了关于此功能的MSDN docs。
偶尔我对FindNextPrinterChangeNotification的一次调用会导致非零(成功)返回值,但ppPrinterNotifyInfo指针为空。我无法在任何地方找到这种行为,所以我不确定这表明了什么。我通常可以通过在我的机器上快速连续发送20或30张照片来重现这个问题。
我知道我从FindFirstPrinterChangeNotification接收的句柄是有效的,因为使用相同句柄的其他调用(使用空指针调用之前和之后)都会成功返回通知数据。
这是我正在使用的定义:
[DllImport("winspool.drv", EntryPoint = "FindNextPrinterChangeNotification", SetLastError = true,
CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
public static extern int FindNextPrinterChangeNotification([In] IntPtr hChangeObject,
[Out] out Int32 pdwChange,
[In, MarshalAs(UnmanagedType.LPStruct)] PrinterNotifyOptions pPrinterNotifyOptions,
[Out] out IntPtr lppPrinterNotifyInfo);
那么导致null ppPrinterNotifyInfo的原因是,这种行为记录在我遗漏的任何地方,这是什么意思?
我可以安全地忽略它为空的情况并继续从同一个句柄接收通知吗?这是否意味着我错过了任何通知?