【发布时间】:2022-01-16 20:06:40
【问题描述】:
编辑:好的,所以我继续前进并制作了一个完全正常工作的控制台应用程序:
public static void Main(string[] args)
{
SerialPort mySerialPort = new SerialPort("COM4");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.RtsEnable = true;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.Open();
Console.WriteLine("Press any key to continue...");
Console.WriteLine();
Console.ReadKey();
mySerialPort.Close();
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(100);
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine($"Data Received: {indata}");
indata = "";
}
现在的问题是,当我尝试在 UWP 应用中做类似的事情时 -
public void InitScanner()
{
SerialPort mySerialPort = new SerialPort("COM4")
{
BaudRate = 9600,
Parity = Parity.None,
StopBits = StopBits.One,
DataBits = 8,
Handshake = Handshake.None,
RtsEnable = true
};
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.Open();
tBlock_spState.Text = mySerialPort.IsOpen.ToString();
}
void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(100);
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
tBlock_test.Text = indata;
}
public MainPage()
{
this.InitializeComponent();
InitScanner();
}
它抛出一个 System.IO.IOException,描述为“信号量上的帖子太多”(抱歉翻译,我使用的是捷克语的 VS)。有谁知道发生这种情况的原因?再一次,在任何地方都找不到任何东西。
所以,我的任务是编写代码,它可以允许从不像键盘的条形码扫描仪读取数据并将其写入文本框。我的想法是可以通过 System.IO.Ports.SerialPort 类来实现,但我完全不知道如何让它正常工作。我正在 UWP 中处理这个问题。到目前为止我已经尝试过了
SerialPort sp = new SerialPort("COM4", 9600);
void MethodName()
{
string s;
if(!sp.IsOpen)
sp.Open();
while (sp.BytesToRead > 0)
{
s = sp.ReadLine();
tBlock_test.Text = s;
}
sp.Close();
}
这就是我结束的地方,不知道下一步该做什么,或者即使这在某种程度上是正确的。再次,基本问题,我知道,但我严重坚持这一点,无法在任何地方找到解决方案。我将不胜感激。
【问题讨论】:
-
只有您知道条码扫描仪的确切型号,您必须查找有关它的数据表以了解它如何发送数据(以及它何时发送数据)。仅供参考:您可能希望在
SerialPort上使用DataReceived事件,这样您就不必每 x 秒手动轮询一次 -
是否可以作为先决条件从条码扫描器接收数据?如果您还没有这样做,请参阅此示例代码。 Windows-universal-samples/Samples/CustomSerialDeviceAccess/cs/
-
为什么不使用camera barcode scanner?
-
@Nico Zhu 因为我的任务是让这项工作为人们服务,而不是为相机扫描仪服务。这是我老板的事,不是我的
-
请不要在您的标题中添加 SOLVED。人们会看看是否有(接受的)答案。
标签: c# uwp serial-port barcode barcode-scanner