PrintDocument(System.Drawing.Printing)を印刷した後、printjobsのステータスを確認してみます。
最初の手順: printDocumentを初期化します。
第二ステップ: System.Drawing.Printing.PrinterSettings.InstalledPrinters.Cast<string>();
からお使いのプリンタ名を取得し、あなたのprinterDocument.PrinterSettings.PrinterName
第三ステップにそれをコピーします。 印刷して処分してください。
printerDocument.Print();
printerDocument.Dispose();
最後のステップ:タスクでチェックを実行します(UIスレッドをブロックしないでください)。
private bool IsPrinterOk(string name,int checkTimeInMillisec)
{
System.Collections.IList value = null;
do
{
//checkTimeInMillisec should be between 2000 and 5000
System.Threading.Thread.Sleep(checkTimeInMillisec);
using (System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_PrintJob WHERE Name like '%" + name + "%'"))
{
value = null;
if (searcher.Get().Count == 0) // Number of pending document.
return true; // return because we haven't got any pending document.
else
{
foreach (System.Management.ManagementObject printer in searcher.Get())
{
value = printer.Properties.Cast<System.Management.PropertyData>().Where(p => p.Name.Equals("Status")).Select(p => p.Value).ToList();
break;
}
}
}
}
while (value.Contains("Printing") || value.Contains("UNKNOWN") || value.Contains("OK"));
return value.Contains("Error") ? false : true;
}
幸運:ここ
Task.Run(()=>{
if (!IsPrinterOk(printerDocument.PrinterSettings.PrinterName,checkTimeInMillisec))
{
// failed printing, do something...
}
});
は実装です。
このWPFはどのように関係していますか? – benPearce
こんにちは、あなたはこの問題の解決策を見つけることができましたか?私もそれに直面した。 – rem
@rem - no、残念ながら、これらのプロパティを動作させる方法を見つけることができませんでした。最終的には、私のアプリにプリンタのステータスを表示するだけでは問題にならなかったので、私は全体のアイデアをあきらめました。答えを見つけたら、ここに投稿してください! –