我有 Arduino 连续发送数据而不关心延迟,我想将延迟放在 C# 中的显示器上,所以我可以打印所有值而不会丢失任何东西,但在每一行我想延迟(让说)两秒钟。我以Thread.Sleep某种方式阻止并延迟了我的用户界面并且Task.Delay无济于事。有谁知道如何解决这个问题?
我的代码:
private SerialPort mySerialPort;
private readonly StreamWriter sw = new(@"D:\MAAT\readcoba.csv");
public MainWindow()
{
InitializeComponent();
Configure();
}
private void Configure()
{
mySerialPort = new(Port())
{
BaudRate = 9600,
Parity = Parity.None,
StopBits = StopBits.One,
DataBits = 8,
};
mySerialPort.DataReceived += DataReceivedHandler;
mySerialPort.Open();
}
private string Port()
{
string port = "";
string[] ports = SerialPort.GetPortNames();
foreach (string x in ports)
{
port = x;
}
return port;
}
private async void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
// It's still not work
await Task.Delay(2000);
string indata = mySerialPort.ReadExisting();
string[] arrData = indata.Split(',');
Application.Current.Dispatcher.Invoke(() =>
{
foreach (string item in arrData)
{
raw_data_label.Content = raw_data_label.Content.ToString().Contains("Nothing to Display") ?
$"{item}" : $"{raw_data_label.Content}" + $"{item}";
}
sw.WriteLine(indata);
});
}
private void WindowClosed(object sender, EventArgs e)
{
sw.Close();
mySerialPort.Close();
}
}