我找到了一种方法,通过嵌套调用写入串口的语句,并循环执行直到串口不再为空,可以实现连接并且它可以工作。平均需要循环500次才能连接,但它总是能够连接成功。我知道这很危险,因为如果始终为空,则会出现无限循环,所以我尝试将do循环改成for循环。然而,使用for循环时,即使迭代50000次,它仍然返回空值。有其他人遇到类似的问题并找到更好的解决方案吗?我正在连接到Arduino Uno。
我没有使用Serial Sample代码,原因是我想使用下拉菜单,使用端口名称而不是设备ID名称。以下是我的代码。谢谢。
//lists com ports
private async void listPorts()
{
try
{
string aqs = SerialDevice.GetDeviceSelector();
var dlist = await DeviceInformation.FindAllAsync(aqs);
status.Text = "Select a device and connect";
for (int i = 0; i < dlist.Count; i++)
{
var port = await SerialDevice.FromIdAsync(dlist[0].Id);
ConnectDevices.Items.Add(port.PortName);
}
comConnect.IsEnabled = true;
ConnectDevices.SelectedIndex = 0;
}
catch (Exception ex)
{
status.Text = ex.Message;
}
}
//connects to the selected com port
private async void comConnect_Click(object sender, RoutedEventArgs e)
{
_key = 0;
status2.Text = "";
string aqs = SerialDevice.GetDeviceSelector(ConnectDevices.SelectedItem.ToString());
var dlist = await DeviceInformation.FindAllAsync(aqs);
if (dlist.Count <= 0)
{
status.Text = "No devices found.";
return;
}
try
{
do
{
serialPort = await SerialDevice.FromIdAsync(dlist[0].Id);
status.Text = "Connecting to serial port...";
} while (serialPort == null);
// Configure serial settings
serialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);
serialPort.BaudRate = 38400;
serialPort.Parity = SerialParity.None;
serialPort.StopBits = SerialStopBitCount.One;
serialPort.DataBits = 8;
serialPort.Handshake = SerialHandshake.None;
status.Text = "Serial port configured successfully.";
我已将以下内容添加到package.appmanifest文件中。
<Capabilities>
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
</Capabilities>