最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# 實現(xiàn)打印機狀態(tài)查詢與阻塞打印

 更新時間:2021年05月10日 10:27:23   作者:code2roc  
這篇文章主要介紹了c# 引用System.Management來實現(xiàn)對打印機狀態(tài)的查詢,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下

在使用winform編寫自動打印服務的過程中,發(fā)現(xiàn)只要進行了打印命令的調(diào)用,文檔就會進入到打印等待隊列,如果打印機無法正常工作,則會影響到相關業(yè)務數(shù)據(jù)的正確轉(zhuǎn)換,所以需要檢查打印機的狀態(tài)來保障每次打印時打印機處于空閑狀態(tài),打印時隊列中也只能有一個文檔,本文是通過引用System.Management來實現(xiàn)對打印機狀態(tài)的查詢

打印機狀態(tài)獲取

enum PrinterStatus
        {
            其他 = 1,
            未知 = 2,
            空閑 = 3,
            打印 = 4,
            預熱 = 5,
            停止打印 = 6,
            脫機 = 7,
        }

        /// <summary>
        /// 獲取打印機的當前狀態(tài)
        /// </summary>
        /// <param name="PrinterDevice">打印機設備名稱</param>
        /// <returns>打印機狀態(tài)</returns>
        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 Collections
            ManagementObjectSearcher 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;
        }

打印機阻塞隊列實現(xiàn)

這里主要是通過一個while循環(huán)來不停的獲取打印機的狀態(tài),空閑時才會進行下一次打印,通過兩個標志位來配合輪詢的外部介入退出

FinishWait標志位是任務內(nèi)部的標識,如果打印機檢查到了錯誤狀態(tài)則進行輪詢退出

GlobalInfo.IsGlobalExist標志位是程序全局標識,如果界面上通知用戶等待時間過長,可以進行人工手動干預退出

//檢查打印機狀態(tài)
                    if (!CheckPrinter(PrintName))
                    {
                        throw new PrintCheckException("打印機處于脫機狀態(tài)");
                    }
                    PrinterStatus State = GetPrinterPrinterStatus(PrintName);
                    if (State == PrinterStatus.空閑)
                    {

                    }
                    else if (State == PrinterStatus.打印 || State == PrinterStatus.預熱)
                    {
                        //正在打印/預熱時循環(huán)去查詢打印機狀態(tài),如果變成了就緒就開始打印
                        while (State != PrinterStatus.空閑 && !FinishWait && !GlobalInfo.IsGlobalExist)
                        {
                            State = GetPrinterPrinterStatus(PrintName);
                            if (!CheckPrinter(PrintName))
                            {
                                FinishWait = true;
                                throw new PrintCheckException("打印機處于脫機狀態(tài)");
                            }
                            if (State == PrinterStatus.打印 || State == PrinterStatus.預熱 || State == PrinterStatus.空閑)
                            {
                                if (State == PrinterStatus.空閑)
                                {

                                    FinishWait = true;
                                }
                            }
                            else
                            {
                                FinishWait = true;
                                throw new PrintCheckException("打印機狀態(tài)錯誤,當前狀態(tài):" + State.ToString());
                            }
                        }

以上就是c# 實現(xiàn)打印機狀態(tài)查詢與阻塞打印的詳細內(nèi)容,更多關于c# 打印機狀態(tài)查詢與阻塞打印的資料請關注腳本之家其它相關文章!

相關文章

  • 詳解如何在ASP.NET Core配置請求超時中間件

    詳解如何在ASP.NET Core配置請求超時中間件

    本文參考官方文檔,為大家詳細介紹如何使用Asp.net core 8.0 的最小API 模板項目,配置超時中間件,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2024-01-01
  • 關于C#中ajax跨域訪問問題

    關于C#中ajax跨域訪問問題

    最近做項目,需要跨域請求訪問數(shù)據(jù)問題。下面通過本文給大家分享C#中ajax跨域訪問代碼詳解,需要的朋友可以參考下
    2017-05-05
  • C#中的文件路徑獲取函數(shù)和文件名字獲取函數(shù)小結

    C#中的文件路徑獲取函數(shù)和文件名字獲取函數(shù)小結

    這篇文章主要介紹了C#中的文件路徑獲取函數(shù)和文件名字獲取函數(shù)小結,本文講解了獲取絕對文件路徑、獲取文件名字、獲得包含 path 目錄信等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • C#連接Informix數(shù)據(jù)庫的問題

    C#連接Informix數(shù)據(jù)庫的問題

    這篇文章主要介紹了C#連接Informix數(shù)據(jù)庫的問題,本文給大家介紹的非常詳細,對大家的工作或?qū)W習具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • c#中LINQ的基本用法(一)

    c#中LINQ的基本用法(一)

    這篇文章介紹了c#中LINQ的基本用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C# ListView雙擊Item事件

    C# ListView雙擊Item事件

    ListView沒有Item的雙擊事件,只能通過變通的方法得到,以下是我的變通方法
    2009-09-09
  • C#實現(xiàn)流程圖設計器

    C#實現(xiàn)流程圖設計器

    這篇文章主要介紹了C#實現(xiàn)流程圖設計器,感興趣的小伙伴們可以參考一下
    2015-11-11
  • C#實現(xiàn)對字符串進行大小寫切換的方法

    C#實現(xiàn)對字符串進行大小寫切換的方法

    這篇文章主要介紹了C#實現(xiàn)對字符串進行大小寫切換的方法,涉及C#操作字符串的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • C#使用正則表達式

    C#使用正則表達式

    這篇文章介紹了C#使用正則表達式的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#使用log4net記錄日志

    C#使用log4net記錄日志

    本文詳細講解了C#使用log4net記錄日志的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12

最新評論

凤庆县| 鄂托克旗| 宝鸡市| 安吉县| 河北省| 上杭县| 府谷县| 醴陵市| 筠连县| 博客| 朔州市| 岱山县| 永泰县| 昆明市| 长子县| 黄山市| 会泽县| 囊谦县| 滦平县| 霸州市| 洛南县| 万山特区| 定日县| 高州市| 峨边| 大同县| 当雄县| 辽阳市| 津南区| 双牌县| 运城市| 高邮市| 连州市| 九龙县| 兴城市| 平武县| 孝感市| 海城市| 平陆县| 南安市| 清水河县|