【发布时间】:2023-04-04 19:16:01
【问题描述】:
我有一个接口ISFactory如下。
namespace MyApp.ViewModels
{
public interface IStreamFactory
{
Stream CreateSPStream(string sPName);
}
}
在Windows非通用版本上,上述功能实现如下。
public Stream CreateSerialPortStream(string serialPortName)
{
var p = new System.IO.Ports.SerialPort();
p.PortName = serialPortName;
p.BaudRate = 9600;
p.RtsEnable = true;
p.DtrEnable = true;
p.ReadTimeout = 150;
p.Open();
return p.BaseStream;
}
Windows Universal 中不再提供此实现。我尝试的内容如下所示。
public Stream CreateSerialPortStream(string serialPortName)
{
var selector = SerialDevice.GetDeviceSelector(serialPortName); //Get the serial port on port '3'
var devices = await DeviceInformation.FindAllAsync(selector);
if (devices.Any()) //if the device is found
{
var deviceInfo = devices.First();
var serialDevice = await SerialDevice.FromIdAsync(deviceInfo.Id);
//Set up serial device according to device specifications:
//This might differ from device to device
serialDevice.BaudRate = 19600;
serialDevice.DataBits = 8;
serialDevice.Parity = SerialParity.None;
}
}
我收到以下错误。
await 运算符只能在异步方法中使用。`
任何人都可以提出解决这个问题的方法。
【问题讨论】:
-
public async Task<Stream> CreateSerialPortStream(string serialPortName) -
@Nkosi - 我可以从
Task<Stream>获得Stream。我正在将stream传递给其他现在失败的函数。 -
@Nkosi - 所以我必须更改界面?
-
我可能说得太早了。检查
serialDevice.InputStream -
是的,如果你正在做
async/await,那么你必须返回一个Task
标签: c# async-await