【发布时间】:2015-11-08 12:47:34
【问题描述】:
只有我一个人,还是这是一个错误?
serialPort = await SerialDevice.FromIdAsync(Id);
serialPort 始终为 null,即使 Id 不是。
我需要让这个工作。现在我只是在编写非常“快速而肮脏”的代码来测试来自 Windows 10 通用应用程序的串行通信。我在 x86 和 x64 中都进行了调试,结果相同。
这是我现在所处的位置,但是如果不创建 serialPort,我就不能走太远......
public class SerialComm
{
private SerialDevice serialPort;
DataWriter dataWriteObject = null;
DataReader dataReaderObject = null;
public async void StartTest()
{
var deviceSelector = SerialDevice.GetDeviceSelector("COM3");
var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(deviceSelector);
var myCurrentDevice = myDevices[0];
string Id = myCurrentDevice.Id.ToString();
try
{
serialPort = await SerialDevice.FromIdAsync(Id);
}
catch (Exception)
{
throw;
}
StringBuilder commandBuilder = new StringBuilder();
while (true)
{
var rBuffer = (new byte[1]).AsBuffer();
await serialPort.InputStream.ReadAsync(rBuffer, 1, InputStreamOptions.Partial);
if ((char)rBuffer.ToArray()[0] != '\n')
{
commandBuilder.Append((char)rBuffer.ToArray()[0]);
}
else
{
string temp = "";
try
{
temp += rBuffer.ToString();
}
catch (Exception)
{
temp = "Error";
}
commandBuilder.Append(temp);
}
string stringToDisplay = commandBuilder.ToString();
}
感谢您的帮助和建议......
【问题讨论】:
-
检查在 GitHub 上找到的“官方”示例 SerialSample,它的作用相同。这是 10.0.10240.0 和 Windows 10 版本 10240
-
文档太粗制滥造,无法提供明智的答案。我会随机猜测,由于没有明确的 Open() 方法,因此您无法获得一个,因为该设备已在使用中。或者您忘记在清单中要求“串行通信”功能。
-
感谢您的回答,汉斯。我应该说我确实在清单中添加了该功能。另请注意,相同的函数在我的 Microsoft 制作和分发的示例中也给出了 null,所以它不仅仅是我的代码。我猜想,如果设备已经在使用中,就会抛出异常,而不是返回 null ......(只是猜测......)
-
我在使用 FTDI 设备时遇到了同样的问题,无论是我的代码还是 GitHub 上的 SerialSample。你找到解决方案了吗?
-
很好的答案,但是为了未来的 googlers 的利益,如果您不使用
Dispose的SerialDevice实例,它将一直不可用,直到 GC 再次运行并且会表现出非常相似的症状.
标签: serial-port uwp