如何让C#SerialPort.InputStream跨类?

时间:2016-04-21 16:26:27

标签: c# win-universal-app

我正在使用UWP-App中的UART设备。此外,我创建了一个Connector类(用于连接UART-Device)和单例模式。现在我陷入了让DataReader工作的问题:这个代码片段适用于Class1(Page1的ViewModel):

private async Task Load()
{
    dataReader = new DataReader(Connector.Current.Device.InputStream);

            uint ReadBufferLength = 16;

            uint readbytes = await dataReader.LoadAsync(ReadBufferLength).AsTask();
            private byte[] RxBytes = new byte[12];

            if (readbytes > 0)
            {
                 dataReader.ReadBytes(RxBytes);
                Debug.WriteLine("Bytes recieved");

            } }

但是当我尝试使用第二个类(On Page2)访问(使用此方法的完全副本)InputStream时,它给了我一个例外。

  

由于线程退出或应用程序请求,I / O操作已中止

不幸的是API of the InputStream并不清楚在InputStream上获取多个DataReader,所以我猜这是不可能的。

我需要来自Class1和Class2中Inputstream的字节(同时)。这甚至可能吗?

2 个答案:

答案 0 :(得分:1)

我建议将数据读入一个变量 - 在读取期间锁定(线程安全) - 然后从类中访问该变量。

答案 1 :(得分:0)

您遇到的问题很可能是因为您已经从InputStream中读取了("应用程序请求"在您的例外中)。

获取它以便多次读取它的最简单方法之一就是在它周围创建一个简单的包装器来为你缓存它,这样你就可以多次读取它。

create: function () { $(this).parent().appendTo('#my-desired-form') },

如果您碰巧有理由阅读不同的流,您可以随时向该类添加public static class InputStreamWrapper { private static DataReader data; public static DataReader InputStream { get { if (data == null) { data = new DataReader(Connector.Current.Device.InputStream); } return data; } } } 方法,将Reset()设置回data,以便再次阅读。