代码之家  ›  专栏  ›  技术社区  ›  bask185

c#如何在此设置中实现后台?

  •  2
  • bask185  · 技术社区  · 7 年前

    private void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                rxBuffer += serial.ReadExisting(); // add new bytes to the string 'rxBuffer'
    
                this.Invoke(new EventHandler(serialReceived));
            }
    
            private void serialReceived(object s, EventArgs e)
            {
                while (rxBuffer.Length > 0) // keep processing bytes until the string is empty
                {
                    // textBox1.Text += rxBuffer[0];
                    byte b = Convert.ToByte(rxBuffer[0]);
                    string hexValue = b.ToString("X");
    
                    rxBuffer = rxBuffer.Remove(0, 1); // removes the 'captured' byte from the string
                    ..... 
                    lots of code
    


    控制UI元素,它们可以存储或读取文本文件,并通过串行端口发送字节,它可以做任何事情。

    如何在当前的代码设置中实现后台工作程序?到目前为止,我所有的尝试都失败了。

    编辑: 我想添加一些我刚刚在下面评论的内容。我以为 serial_DataReceived 将用每个字节调用。在我的应用程序中,在接下来的两个接收字节之间碰巧有2ms的延迟。 ReadExisting()

    我个人认为 invoke() 使一切都变慢了,但我之前没有使用C的经验,所以我只是猜测,无论如何我对任何解决方案都持开放态度。

    2 回复  |  直到 7 年前
        1
  •  1
  •   bask185    7 年前

    这段代码似乎就是解决方案。我注意到我的GUI运行得非常流畅

    private void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            rxBuffer += serial.ReadExisting();
    
            try { backgroundWorker1.RunWorkerAsync(); } catch { }
        }
    
    
        private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            //private void serialReceived(object s, EventArgs e)
            //{
            while (rxBuffer.Length > 0)
            {
                // textBox1.Text += rxBuffer[0];
                byte b = Convert.ToByte(rxBuffer[0]);
                string hexValue = b.ToString("X");
    
                rxBuffer = rxBuffer.Remove(0, 1);
    

    我尝试使用isBusy()标志,但它不起作用,所以我改用try和catch块。

    我有一个问题,除了面板之外,我无法控制我的UI元素。我刚发现。当我还在不同的线程中时,我正在尝试访问UI元素。

        2
  •  1
  •   Baddack    7 年前

    我经常看到这个问题,人们通过串口发送和接收命令。我这里有一个很好的例子 https://stackoverflow.com/a/38536373/2009197