程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 線程-C# 條碼打印 程序開始運行時是正常,但進行SerialPort通信操作後打印就卡死。

線程-C# 條碼打印 程序開始運行時是正常,但進行SerialPort通信操作後打印就卡死。

編輯:編程綜合問答
C# 條碼打印 程序開始運行時是正常,但進行SerialPort通信操作後打印就卡死。

1.我是C#的斑馬條碼打印,程序運行後測試打印是沒問題的。但進行一系統COM口的SerialPort通信操作後,再打印就卡死。這時如果重啟打印機,就可以繼續打印。請問這是什麼原因,是線程卡死嗎?怎樣破啊。以下是打印的兩個主要方法代碼,謝謝。
2.
//運行這個方法就可以打印。
public static void PrintBarCode(string devicePath, int leftMarginAdd, int topMarginAdd, string barcode, string rosh, string productModel, string lineCode, string vendorId, string cusModel, string BOSerialNo, string size)
{
StringBuilder cmd = new StringBuilder();
cmd.Append("I8,A,001\r\n");

cmd.Append("Q200,016\r\n");

cmd.Append("q863\r\n");

cmd.Append("rN\r\n");

cmd.Append("S2\r\n");

cmd.Append("D7\r\n");

cmd.Append("ZT\r\n");

cmd.Append("JF\r\n");
cmd.Append("O,S\r\n");

cmd.Append("R" + (300 + leftMarginAdd).ToString() + "," + (20 + topMarginAdd).ToString() + "\r\n");
cmd.Append("f100\r\n");

cmd.Append("N\r\n");

cmd.Append("A35,1,0,1,1,1,N,\"Q.C.Pass\"\r\n");

cmd.Append("b32,16,D," + size + ",\"" + barcode + "\"\r\n");//二維碼
cmd.Append("A125,1,0,1,1,1,N,\"" + rosh + "\"\r\n");
cmd.Append("A15,149,3,1,1,1,N,\"" + productModel + "\"\r\n");//產品型號(左邊)
cmd.Append("A17,162,0,2,1,1,R,\"" + lineCode + "\"\r\n");//設備編碼(左下角)

        cmd.Append("P1\r\n");

        Printer printer = new Printer();
        printer.DevicePath = devicePath;
        if (!printer.Open())
        {  
            return;
        }
        bool tempBool = printer.Write(cmd.ToString());   //過了這裡就可以打印。下面的Write方法
        if (!printer.Close())
        {              
            return;
        }


   //打印
    public bool Write(string Mystring)
    {
        if (iHandle != -1)
        {
            int i;
            OVERLAPPED x;
            byte[] mybyte = System.Text.Encoding.Default.GetBytes(Mystring);
            return WriteFile(iHandle, mybyte, mybyte.Length, out i, out x);   //程序剛跑起來是可以打印,但進行一系統通信操作後,到這裡就卡死。怎樣破?
        }
        else
        {
            throw new Exception("端口未打開!");
        }
    }

最佳回答:


重啟打印機就可以就緒打印(沒有動過程序,或者重啟程序之類的),說明問題不在程序而在於通訊
由於條碼打印機很多是用串口的,因此
第一懷疑對象是協議沖突,例如你的串口通訊協議傳到你的條碼打印機裡,造成條碼打印機不能識別(當然,那是別人的指令),並且不能正確判斷下一指令的開始、結束。
第二懷疑對象是端口沖突,例如兩個端口使用同樣的資源之類的,造成沖突;

gamefinity
u010002418
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved