Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF应用程序在从Arduino接收数据时崩溃_C#_.net_Wpf_Arduino - Fatal编程技术网

C# WPF应用程序在从Arduino接收数据时崩溃

C# WPF应用程序在从Arduino接收数据时崩溃,c#,.net,wpf,arduino,C#,.net,Wpf,Arduino,我正在开发一个wpf应用程序,它将收集来自Arduino Leonardo的传感器数据。事实上,在发送串行数据时,没有任何问题,但在读取数据时,应用程序似乎冻结了。这是我的密码 private void connect_Click(object sender, RoutedEventArgs e) { try { String pno = cno.Text; sp.PortName = pno; sp.BaudRate = 9600

我正在开发一个wpf应用程序,它将收集来自Arduino Leonardo的传感器数据。事实上,在发送串行数据时,没有任何问题,但在读取数据时,应用程序似乎冻结了。这是我的密码

private void connect_Click(object sender, RoutedEventArgs e)
{
    try
    {
        String pno = cno.Text;
        sp.PortName = pno;
        sp.BaudRate = 9600;
        sp.Open();
        s.Text = "Connected";
                    }
    catch (Exception)
    {

        MessageBox.Show("Please check the com port number or the hardware attached to it");
    }
}

private void go_Click(object sender, RoutedEventArgs e)
{

    string a = sp.ReadLine();
    Dispatcher.Invoke((Action)(() => receivedblock.Text = a));            
}

go_Click方法是一个按钮,按下该按钮时将接受串行数据。

问题在于
sp.ReadLine()
是一个阻塞调用。因此,当你调用它时,它会等待,直到它可以从
sp
读取一行代码,这样你的应用程序就会冻结


您应该订阅该活动并在那里完成您的工作。

sp.Readline()
是一个阻塞调用!因此,当你调用它时,它会等待,直到它可以从
sp
读取一行代码,这样你的应用程序就会冻结!可能的解决办法是什么?我想获取实时数据。
sp
的类型是什么?SerialPort sp=new SerialPort();你可能想看看。它的官方版本仍处于测试阶段,但它支持串行消息的可观察接收器(以及更多),这在WPF应用程序中尤其方便。