Reputation: 255
I have coded a simple console application that checks the status of a printer. When status of a printer changes to a "printing status" the console app simply writes out a message saying "The Printer is now Printing".
Now what i'm having difficulties with is making this program keep checking the status of printer .. I'm not so sure what loop i have to use and how i can apply it. Please see below for more information:
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");
}
What kind of loop could i put above for this program to continuously keep on checking the the printer status? and whenever the status changes to 4 (printing status on the printer i'm targeting ).
Upvotes: 2
Views: 445
Reputation: 2129
If you want this to run forever, a while loop will work:
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);
}
}
As RB pointed out in the comments, Thread.Sleep(1000) will pause the loop for 1 second and stop it consuming all the CPU resource.
EDIT: updated after comments.
Added a bool to track if the printer was already printing. This stops the code writing to the console for as long as the printer is printing. Multiple printers can start and will write to the console. But only once per print job.
Moved the coll variable assignment inside the while loop.
Upvotes: 1