В моем коде есть обработчик асинхронных событий для получения и отправки строк через последовательный UART.В приведенном здесь примере я только получаю.Есть ли способ использовать строку rxBuffer вне Serial ()?Я должен использовать значение на другой странице.
Я прочитал, что async void не может вернуть значение.Задача async будет правильным способом.Как изменить код, чтобы это произошло?Мои попытки всегда терпят неудачу.
using System;
using Windows.System; //ShutdownManager
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.Devices.Enumeration; //UART Serial
using Windows.Devices.SerialCommunication; //UART Serial
using Windows.Storage.Streams; //Uart Serial
//Main
public MainPage()
{
InitializeComponent();
Serial();
} //Main
//Serial
public async void Serial()
{
string aqs = SerialDevice.GetDeviceSelector("UART0"); /* Find the selector string for the serial device */
var dis = await DeviceInformation.FindAllAsync(aqs); /* Find the serial device with our selector string */
SerialDevice SerialPort = await SerialDevice.FromIdAsync(dis[0].Id); /* Create an serial device with our selected device */
/* Configure serial settings */
SerialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);
SerialPort.ReadTimeout = TimeSpan.FromMilliseconds(1000);
SerialPort.BaudRate = 9600; /* mini UART: only standard baudrates */
SerialPort.Parity = SerialParity.None; /* mini UART: no parities */
SerialPort.StopBits = SerialStopBitCount.One; /* mini UART: 1 stop bit */
SerialPort.DataBits = 8;
DataWriter dataWriter = new DataWriter();
const uint maxReadLength = 1024;
DataReader dataReader = new DataReader(SerialPort.InputStream);
while (true)
{
//Receive
uint bytesToRead = await dataReader.LoadAsync(maxReadLength);
string rxBuffer = dataReader.ReadString(bytesToRead);
textblock_DebugRx_live.Text = rxBuffer;
}
} //Serial
Я пробовал это и с Задачей.Как видите, я не профессионал.
Что мне не хватает?С этим кодом мой textblock_DebugRx_live отображает:
System.Threading.TasksTask`1 [System.String]
Код:
using System;
using System.Threading;
using System.Threading.Tasks; //nötig für await Task
using Windows.Devices.Gpio; //GPIO for Raspberry
using Windows.System; //ShutdownManager
using Windows.UI; //Schriftfarbe ändern
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media; //Schriftfarbe ändern
using Windows.Devices.Enumeration; //UART Seriell
using Windows.Devices.SerialCommunication; //UART Seriell
using Windows.Storage.Streams; //Uart Seriell
namespace TAR_Win_IoT
{
public sealed partial class MainPage : Page
{
//Main
public MainPage()
{
InitializeComponent();
Serial();
var b = Serial();
string c = b.ToString();
textblock_Rx_live.Text = c;
} //Main
//Seriell
public async Task<string> Serial()
{
string aqs = SerialDevice.GetDeviceSelector("UART0"); /* Find the selector string for the serial device */
var dis = await DeviceInformation.FindAllAsync(aqs); /* Find the serial device with our selector string */
SerialDevice SerialPort = await SerialDevice.FromIdAsync(dis[0].Id); /* Create an serial device with our selected device */
/* Configure serial settings */
SerialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);
SerialPort.ReadTimeout = TimeSpan.FromMilliseconds(1000);
SerialPort.BaudRate = 9600; /* mini UART: only standard baudrates */
SerialPort.Parity = SerialParity.None; /* mini UART: no parities */
SerialPort.StopBits = SerialStopBitCount.One; /* mini UART: 1 stop bit */
SerialPort.DataBits = 8;
DataWriter dataWriter = new DataWriter();
const uint maxReadLength = 1024;
DataReader dataReader = new DataReader(SerialPort.InputStream);
while (true)
{
//Receive
uint bytesToRead = await dataReader.LoadAsync(maxReadLength);
string rxBuffer = dataReader.ReadString(bytesToRead);
textblock_DebugRx_live.Text = rxBuffer;
return rxBuffer;
}
} //Seriell
}//Main
}//ENDE