花心码农 2015-06-11 23:51 采纳率: 100%
浏览 2157
已采纳

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("端口未打开!");
        }
    }
  • 写回答

2条回答

  • 知常曰明 2015-06-12 01:29
    关注

    重启打印机就可以就绪打印(没有动过程序,或者重启程序之类的),说明问题不在程序而在于通讯
    由于条码打印机很多是用串口的,因此
    第一怀疑对象是协议冲突,例如你的串口通讯协议传到你的条码打印机里,造成条码打印机不能识别(当然,那是别人的指令),并且不能正确判断下一指令的开始、结束。
    第二怀疑对象是端口冲突,例如两个端口使用同样的资源之类的,造成冲突;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记