我试图通过使用以下代码查询Zebra打印机的值来检索它:
public static string GetSettingFromPrinter(string cmd)
{
string setting = string.Empty;
try
{
BasicPortSettings bps = new BasicPortSettings();
bps.BaudRate = BaudRates.CBR_19200;
bps.Parity = OpenNETCF.IO.Serial.Parity.none;
bps.StopBits = OpenNETCF.IO.Serial.StopBits.one;
Port serialPort = new Port("COM1:", bps);
serialPort.Open();
byte[] sendBytes = Encoding.ASCII.GetBytes(cmd);
MessageBox.Show(Encoding.ASCII.GetString(sendBytes, 0, sendBytes.Length));
serialPort.Output = sendBytes;
serialPort.Query(); // <= this is new
byte[] responseBytes = serialPort.Input;
setting = GetString(responseBytes);
serialPort.Close();
return setting;
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
return setting;
}
}
但是,我不知道输出实际发送的位置,或者如何执行此操作。我最好的猜测是调用Port.Query()方法,但这也不起作用 - 至少在设置/ Port.Input值之后没有任何内容。
我已使用旧的SerialPort类成功将命令传递给打印机:
public static bool SendCommandToPrinter(string cmd)
{
bool success; // init'd to false by default
try
{
SerialPort serialPort = new SerialPort();
serialPort.BaudRate = 19200;
serialPort.Handshake = Handshake.XOnXOff;
serialPort.Open();
serialPort.Write(cmd);
serialPort.Close();
success = true;
}
catch // may not need a try/catch block, as success defaults to false
{
success = false;
}
return success;
}
......但是由于它的长牙,建议不要使用它。
如果我知道如何从旧的SerialPort类中读取,我会回到这个snaggletooth。有人知道发送sendBytes(和接收responseBytes)需要做什么吗?
我测试过&#34; COM1&#34;而不是&#34; COM1:&#34; (我使用了后者,因为有一篇文章说结肠是必要的(&lt; =不是医学建议,虽然这在某种意义上也是无效的),但是没有结果,并且#34;显着的差异。
然后我尝试了#34; string.Empty&#34;代替给它一个名字,得到了,&#34; OpenNETCF.IO.Serial.CommPortException:CreateFileFailed 2 ...&#34;
向前...或者是向侧面......
答案 0 :(得分:1)
FWIW,设置Output
属性会立即在线路上发送数据。无需额外的电话。