如何有争议地循环以获取打印机状态

本文关键字:获取 打印机 状态 循环 有争议 | 更新日期: 2023-09-27 18:35:03

我编写了一个简单的控制台应用程序来检查打印机的状态。当打印机的状态更改为"打印状态"时,控制台应用只会写出一条消息,指出"打印机现在正在打印"。

现在我遇到的困难是让这个程序继续检查打印机的状态..我不太确定我必须使用什么循环以及如何应用它。请参阅下文以获取更多信息:

 public static void getPrintJob()
        {
            string printerName = "Some Printer Name";
            string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName);
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
            ManagementObjectCollection coll = searcher.Get();
            foreach (ManagementObject printer in coll)
            {
               if (Convert.ToInt32(printer.Properties["PrinterStatus"].Value) == 4)
               {
                   Console.Write("Printer is Printing");
               }

我可以在上面放置什么样的循环来让这个程序持续检查打印机状态?每当状态更改为 4(我目标打印机上的打印状态(时。

如何有争议地循环以获取打印机状态

如果您希望它永远运行,则 while 循环将起作用:

 public static void getPrintJob()
    {
        string printerName = "Some Printer Name";
        string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName);
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
        while(true)
        {
            ManagementObjectCollection coll = searcher.Get();
            var alreadyPrinting = false;
            foreach (ManagementObject printer in coll)
            {
               if (Convert.ToInt32(printer.Properties["PrinterStatus"].Value) == 4 && !alreadyPrinting)
               {
                   Console.Write("Printer is Printing");
                   alreadyPrinting = true;
               }
               else
               {
                    alreadyPrinting = false;
               }
            }
            Thread.Sleep(1000);
        }
    }

正如 RB 在注释中指出的那样,Thread.Sleep(1000( 将暂停循环 1 秒并停止消耗所有 CPU 资源。

编辑:评论后更新。

添加了布尔值以跟踪打印机是否已打印。只要打印机正在打印,就会停止向控制台写入代码。多台打印机可以启动并将写入控制台。但每个打印作业只能一次。

在 while 循环内移动了 coll 变量赋值。