What causes my UI to freeze when closing a serial port?

前端 未结 2 865
庸人自扰
庸人自扰 2021-01-15 03:17

I am working on a serial port related application. While using DataReceived event of SerialPort I need to update a textbox with the received bytes:

2条回答
  •  不要未来只要你来
    2021-01-15 03:29

    The problem could be solved by adding a timer:

      bool formClosing = false;
        private void Connection_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
          if (formClosing) return;
          _buffer = Connection.ReadExisting();
          Invoke(new EventHandler(AddReceivedPacketToTextBox));
        }
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
          base.OnFormClosing(e);
          if (formClosing) return;
          e.Cancel = true;
          Timer tmr = new Timer();
          tmr.Tick += Tmr_Tick;
          tmr.Start();
          formClosing = true;
        }
        void Tmr_Tick(object sender, EventArgs e)
        {
          ((Timer)sender).Stop();
          this.Close();
        }
    

    Thanks to JohnWein from MSDN

提交回复
热议问题