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

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

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

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

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

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

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

打印機(jī)脫機(jī)檢查

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;
        }

打印機(jī)阻塞隊(duì)列實(shí)現(xiàn)

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

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

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

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

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

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

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

相關(guān)文章

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

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

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

    關(guān)于C#中ajax跨域訪問問題

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

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

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

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

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

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

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

    C# ListView雙擊Item事件

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

    C#實(shí)現(xiàn)流程圖設(shè)計(jì)器

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

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

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

    C#使用正則表達(dá)式

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

    C#使用log4net記錄日志

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

最新評論

平武县| 西盟| 扶余县| 嘉禾县| 安阳市| 新竹县| 淅川县| 洪湖市| 姚安县| 阜新市| 定南县| 高密市| 会理县| 河西区| 泗阳县| 溧水县| 卢氏县| 马龙县| 莱阳市| 平泉县| 宝兴县| 漳平市| 丹棱县| 马关县| 江达县| 喀什市| 报价| 清水河县| 驻马店市| 墨竹工卡县| 卢龙县| 武川县| 儋州市| 西昌市| 方山县| 桐柏县| 耿马| 育儿| 章丘市| 屯门区| 榆树市|