如何有争议地循环以获取打印机状态
本文关键字:获取 打印机 状态 循环 有争议 | 更新日期: 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 变量赋值。