以下是我正在尝试做的一些背景知识:
第2步仅在第一次发生,因为表单不需要在每个标签之前.我的问题是,当我发送表单时,如果我发送标签数据太快,它将无法打印.有时我会在标签上打印"Bluetooth Failure:Radio Non-Operational"而不是我发送的数据.
我通过执行以下操作找到了解决问题的方法:
for (int attempt = 0; attempt < 3; attempt++)
{
try
{
serialPort.Write(labelData);
break;
}
catch (TimeoutException ex)
{
// Log info or display info based on ex.Message
Thread.Sleep(3000);
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,我可以捕获一个TimeoutException并在等待一定时间后重试write方法(三秒似乎一直在工作,但是更少,似乎每次尝试都抛出异常).经过三次尝试,我只是假设串口有问题,让用户知道.
这种方式似乎工作正常,但我确信有更好的方法来处理这个问题.我认为我需要使用SerialPort类中的一些属性,但我找不到任何好的文档或如何使用它们的示例.我试过玩一些属性,但它们似乎都没有做我想要达到的目标.
这是我玩过的属性列表:
我相信这些的一些组合将处理我想要更优雅地做的事情.
我正在使用C#(2.0框架),Zebra QL 220+蓝牙打印机和Windows Mobile 6手持设备,如果这对解决方案有任何影响.
任何建议,将不胜感激.
[UPDATE]
我还应该注意到移动设备使用的是蓝牙2.0,而打印机只使用1.1版本.我假设速度差异是导致打印机在接收数据时落后的原因.