我有一个特殊的问题。
我正在尝试与 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 制造的 Bill to Bill 装置。
我在 UWP 中的属性初始化方面没有犯任何错误。