gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:15 24 4
gpt4 key购买 nike

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

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

 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 资源。

编辑:评论后更新。

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

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

关于c# - 如何有争议地循环以获取打印机状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35452067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com