我编写了一个简单的控制台应用程序来检查打印机的状态。当打印机状态变为“打印状态”时,控制台应用程序只会写出一条消息“打印机正在打印”。
现在我遇到的困难是让这个程序继续检查打印机的状态..我不太确定我必须使用什么循环以及如何应用它。请参阅以下内容以获取更多信息:
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(打印机上的打印状态,我的目标)。
答案 0 :(得分:1)
如果你想让它永远运行,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资源。
编辑: 评论后更新。
添加了一个bool来跟踪打印机是否已经打印。只要打印机正在打印,这就会停止代码写入控制台。多台打印机可以启动并写入控制台。但每个打印作业只有一次。
在while循环中移动了coll变量赋值。