Serial port 为什么DataWriter.StoreAsync()在Windoes IOT Core中不像在桌面UWP中那样超时?

Serial port 为什么DataWriter.StoreAsync()在Windoes IOT Core中不像在桌面UWP中那样超时?,serial-port,windows-iot-core-10,Serial Port,Windows Iot Core 10,我有一个问题,UWP应用程序的目标是运行在Windows IOT Core(Raspberry Pi 3)上,它的行为方式与Windows桌面不同 基本上,我的应用程序有一个字符串列表,它一次推出一个RS-232串行端口。实现硬件握手以控制目标设备的流。我的代码基于以下内容: myDataWriter.WriteString(myStringList[i]); uint x = await PortDataWriter.StoreAsync(); 如果x>0,则递增索引指针(I),并继续循环遍

我有一个问题,UWP应用程序的目标是运行在Windows IOT Core(Raspberry Pi 3)上,它的行为方式与Windows桌面不同

基本上,我的应用程序有一个字符串列表,它一次推出一个RS-232串行端口。实现硬件握手以控制目标设备的流。我的代码基于以下内容:

myDataWriter.WriteString(myStringList[i]);
uint x = await PortDataWriter.StoreAsync();
如果x>0,则递增索引指针(I),并继续循环遍历要发送的字符串列表。如果x不是>0,我不会增加索引指针,我会再次尝试相同的字符串

我的问题发生在由于硬件握手RTS低而导致UART缓冲区填满时

在Windows桌面中,StoreAsync()将根据SerialDevice中的.WriteTimeout参数超时,返回0并允许我做出适当的反应

然而,在IOT Core中,StoreAsync()从不超时,甚至会锁定整个操作系统,并在一段时间后导致蓝屏看门狗违规

有没有人能解释一下这一点,或者提供一些关于如何正确应对导致UART缓冲区填满的硬件握手情况的建议?我需要能够在我的循环中点对长时间的RTS进行反应(在某些情况下说一个小时),并且如果用户选择,则能够在命令上跳出循环。

例如:


谢谢

我甚至尝试过:PortDataWriter.WriteString//uint x=await PortDataWriter.StoreAsync()---已删除---请尝试{Task storeAsyncTask;storeAsyncTask=PortDataWriter.StoreAsync().AsTask();x=await storeAsyncTask;}catch(异常值ex){Debug.WriteLine(ex.Message);}您可以引用和使用CancellationTokenSource(device.WriteTimeout)。我根据Rita发送的内容进行了尝试:使用(var cts=new CancellationTokenSource(Port.WriteTimeout)){x=wait PortDataWriter.StoreAsync().AsTask(cts.Token);}编辑它停止了蓝屏,但当UART缓冲区因握手而满时,仍会挂起应用程序。您是否使用Raspberry Pi上的迷你UART端口()或USB端口(USB到TTL)?我使用的是USB到RS-232适配器(FTDI芯片组)。它显示为FT232R USB UART。我已经提供了关于GitHub的示例代码和更好的描述:非常感谢您的帮助!