0

我正在使用 FindFirstPrinterChangeNotification/FindNextPrinterChangeNotification 方法来监视使用 C# 中的 P/Invoke 的打印机。

我已经彻底阅读了有关此功能的MSDN 文档。

有时,我对 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,这种行为是否记录在我遗漏的任何地方,这是什么意思?

我可以安全地忽略它为空的情况并继续从同一个句柄接收通知吗?这是否意味着我错过了任何通知?

4

0 回答 0