我有一个奇怪的问题。
我正在尝试在UWP项目中与需要串行通信的外围设备进行通信。我正在使用 Windows.Devices.SerialCommunication
。
为了演示目的,我创建了一个新页面,其中包含两个按钮和两个不同的点击处理程序。一个用于打开端口,另一个用于向外围设备发送消息。
其中一个处理程序是:
SerialDevice device;
private async void Button_Click_1(object sender, RoutedEventArgs e)
{
string selector = SerialDevice.GetDeviceSelector("COM7");
DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selector);
if (devices.Any())
{
DeviceInformation deviceInfo = devices.First();
device = await SerialDevice.FromIdAsync(deviceInfo.Id);
//*********************
device.BaudRate = 9600;
device.DataBits = 8;
device.Parity = SerialParity.None;
device.StopBits = SerialStopBitCount.One;
device.ReadTimeout = device.WriteTimeout = TimeSpan.FromMilliseconds(1000);
device.Handshake = SerialHandshake.None;
}
_dataReader = new DataReader(device.InputStream);
_dataWriter = new DataWriter(device.OutputStream);
}
当我启用电源时,外设上会有一个红色的指示灯。当执行上面//*********
这行代码时,指示灯会关闭。然后外设不会响应任何消息。当我停止程序时,指示灯会重新亮起。
我制作了一个完美运行的.NET Framework应用程序,它是完全功能的。我在其中使用了System.IO.Ports
。我注意到了一些事情:
如果我只在.NET Framework应用程序中提取并运行此部分代码:
SerialPort comPort = new SerialPort();
_ComPort.PortName = PortName;
_ComPort.BaudRate = BaudRate;
_ComPort.DataBits = 8;
_ComPort.Parity = Parity.None;
_ComPort.StopBits = StopBits.One;
_ComPort.DataReceived += new SerialDataReceivedEventHandler(_ComPort_DataReceived);
_ComPort.Open();
没有更多内容。
再次运行UWP应用程序,端口完美打开,灯变红,设备响应消息。我可以关闭设备,并从UWP应用程序初始化它任意多次。当我重新启动计算机时,我无法再次从UWP应用程序初始化设备(直到我从.NET Framework应用程序运行所述的代码块)。
如果您想知道,外围设备是Suzo Happ制造的钞票单元。
我在UWP中没有关于属性初始化方面的任何错误。