IOexception 未通过 Arduino 处理

Posted

技术标签:

【中文标题】IOexception 未通过 Arduino 处理【英文标题】:IOexception was unhandled through Arduino 【发布时间】:2015-06-19 08:28:32 【问题描述】:

所以我正在做一个项目,其中一个系统通过 Arduino 和 Xbee 传输数据,而接收系统通过 Arduino 和 Xbee 接收数据。在接收端,我将信息发送到 Visual Studios。所以,当我按下停止按钮停止接收数据时,我得到 IOException 未处理。我该如何解决?

错误将指向我在下面添加评论的行

我在接收端的 C# 代码

public Form1()
    
        InitializeComponent();
    

    private void start_btn_Click(object sender, EventArgs e)
    
        myport = new SerialPort();
        myport.BaudRate = 9600;
        myport.PortName = port_name_tb.Text;
        myport.Parity = Parity.None;
        myport.DataBits = 8;
        myport.StopBits = StopBits.One;
        myport.DataReceived+=SerialDataReceivedEventHandler
        (myport_DataReceived);


        try
      
        myport.Open();
        data_tb.Text = "";
      
        catch (Exception ex)
      
          MessageBox.Show(ex.Message, "Error");
      
    

    void myport_DataReceived(object sender, SerialDataReceivedEventArgs e)
    
        this.Invoke(new EventHandler(displaydata_event));
        in_data = myport.ReadLine();  //------> ERROR POINTED TO THIS LINE
    

    private void displaydata_event(object sender, EventArgs e)
    
        datetime = DateTime.Now;
        string date = datetime.Day + "/" + datetime.Month;
        string time = datetime.Hour + ":" + datetime.Minute + ":" 
         +      datetime.Second;
        data_tb.AppendText(date +" " +  time + "\t\t" + in_data + "\n");
    

    private void stop_btn_Click(object sender, EventArgs e)
    
        try
        
            myport.Close();
        

        catch (Exception ex2)
        
            MessageBox.Show(ex2.Message, "Error");
        

    

    private void save_btn_Click(object sender, EventArgs e)
    
        datetime = DateTime.Now;
        string date = datetime.Day + "/" + datetime.Month;
        string time = datetime.Hour + ":" + datetime.Minute + ":" 
         + datetime.Second;

        try
        
            string pathfile = @"C:\Users\User\Desktop\Cdata\";
            string filename = "prototype.txt";
            System.IO.File.WriteAllText(pathfile + filename, data_tb.Text);
            MessageBox.Show("Data has been saved to " + pathfile);
        
        catch (Exception ex3)
        
            MessageBox.Show(ex3.Message, "Error");
        
        
      

【问题讨论】:

【参考方案1】:

您没有正确捕获交换机中的异常,因此出现未处理的 IOException。

您可以通过将捕获从 Exception 更改为 IOException exX& 来解决这个问题。

【讨论】:

嗨,迈克,我已经编辑了 void myport_DataReceived: void myport_DataReceived(object sender, SerialDataReceivedEventArgs e) try this.Invoke(new EventHandler(displaydata_event)); in_data = myport.ReadLine(); catch(Exception ex5) MessageBox.Show(ex5.Message, "Error"); 但我如何成功阻止端口接收数据? 完成后,您可以简单地使用myport.Close();。您仍然可以使用该端口,只需使用 myport.Open(); 重新打开它。

以上是关于IOexception 未通过 Arduino 处理的主要内容,如果未能解决你的问题,请参考以下文章

从 Arduino Yun 上的 USB 接口获取 MIDI 音符

读取 Arduino 的串口

GPS模块未使用Arduino显示有用信息

Arduino sprintf float 未格式化

怎么用5v的arduino控制12v的共阴rgb灯带,用9014三极管

解决用vscode开发arduino时Serial未定义