如何用c#实现打印机脱机检查及阻塞打印
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"如何用c#实现打印机脱机检查及阻塞打印",在日常操作中,相信很多人在如何用c#实现打印机脱机检查及阻塞打印问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2026年10月31日如何用c#实现打印机脱机检查及阻塞打印
这篇文章主要介绍"如何用c#实现打印机脱机检查及阻塞打印",在日常操作中,相信很多人在如何用c#实现打印机脱机检查及阻塞打印问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何用c#实现打印机脱机检查及阻塞打印"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
打印机状态获取
enum PrinterStatus { 其他 = 1, 未知 = 2, 空闲 = 3, 打印 = 4, 预热 = 5, 停止打印 = 6, 脱机 = 7, }/// /// 获取打印机的当前状态/// /// 打印机设备名称/// 打印机状态 private static PrinterStatus GetPrinterPrinterStatus(string PrinterDevice) { PrinterStatus ret = 0;string path = @"win32_printer.DeviceId='" + PrinterDevice + "'"; ManagementObject printer = new ManagementObject(path); printer.Get(); ret = (PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);return ret; }打印机脱机检查
public static bool CheckPrinter(string BindPrintName) { ManagementScope scope = new ManagementScope(@"\root\cimv2"); scope.Connect();// Select Printers from WMI Object CollectionsManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer");string printerName = "";foreach (ManagementObject printer in searcher.Get()) { printerName = printer["Name"].ToString().ToLower();if (printerName.IndexOf(BindPrintName.ToLower()) > -1) {//foreach (var property in printer.Properties)//{// LogUtil.WriteLog(property.Name + ":" + property.Value);//}if (printer["WorkOffline"].ToString().ToLower().Equals("true")) {return false; }else{return true; } } }return false; }打印机阻塞队列实现
这里主要是通过一个while循环来不停的获取打印机的状态,空闲时才会进行下一次打印,通过两个标志位来配合轮询的外部介入退出
FinishWait标志位是任务内部的标识,如果打印机检查到了错误状态则进行轮询退出
GlobalInfo.IsGlobalExist标志位是程序全局标识,如果界面上通知用户等待时间过长,可以进行人工手动干预退出
//检查打印机状态if (!CheckPrinter(PrintName)) {throw new PrintCheckException("打印机处于脱机状态"); } PrinterStatus State = GetPrinterPrinterStatus(PrintName);if (State == PrinterStatus.空闲) { }else if (State == PrinterStatus.打印 || State == PrinterStatus.预热) {//正在打印/预热时循环去查询打印机状态,如果变成了就绪就开始打印while (State != PrinterStatus.空闲 && !FinishWait && !GlobalInfo.IsGlobalExist) { State = GetPrinterPrinterStatus(PrintName);if (!CheckPrinter(PrintName)) { FinishWait = true;throw new PrintCheckException("打印机处于脱机状态"); }if (State == PrinterStatus.打印 || State == PrinterStatus.预热 || State == PrinterStatus.空闲) {if (State == PrinterStatus.空闲) { FinishWait = true; } }else{ FinishWait = true;throw new PrintCheckException("打印机状态错误,当前状态:" + State.ToString()); } }到此,关于"如何用c#实现打印机脱机检查及阻塞打印"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
打印机
状态
脱机
检查
空闲
阻塞
c#
学习
标志
更多
标识
错误
帮助
循环
实用
接下来
两个
人工
任务
全局
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
小米移动互联网科技园
云之行互联网科技
互联网科技工作委员会副主任毛军
互联网金融 科技金融
卓越科技(互联网 )
狮子座互联网科技有限公司
互联网科技公司有哪些
深圳艾佳互联网科技
深圳互联网科技怎么样
上海电发互联网科技有限公司
互联网科技公司实习生
互联网5g黑科技有哪些
亳州好赞互联网科技有限公司
互联网科技人工智能实验室
允成互联网科技有限公司融资
互联网科技年终奖
互联网科技企业商标注意事项
广州三三互联网科技有限公司
互联网的黑科技实验室
伍佰万互联网科技是干嘛的
科技信息互联网
麻工互联网科技
科技大学互联网专业好不好
青海省互联网新科技
本届互联网博览会上的黑科技
996高科技互联网公司
深圳市罗太互联网科技有限公司
电子商务与互联网科技的关系
艺电能源互联网科技有限公司招聘
互联网科技快速发展优美句子