使用另一个线程并调用

时间:2018-09-10 09:49:40

标签: c# thread-safety invoke

我正在尝试实现一个系统,以便使用另一个线程不断测试richTextBox上的结果是否为空。

这里是完整的上下文,我从秤获取输入以显示在richTextBox上。如果读数稳定,我会将结果添加到数组数据库中。

以前,我是同步工作的。但是我需要同时运行两次该程序。可以在同步的基础上很好地工作。

        void GetStableReading(SerialPort VarPort)
        {
            richSerialOut.Text = VarPort.ReadExisting();
            richSerialOut.Update();
            while (string.IsNullOrWhiteSpace(richSerialOut.Text))
            {
                richSerialOut.Text = VarPort.ReadExisting();
                richSerialOut.Update();
                if (richSerialOut.Text.Contains("ES") || richSerialOut.Lines.Count() > 3)
                {
                    richSerialOut.Text = VarPort.ReadExisting();
                    richSerialOut.Update();
                }
            }
            database.Add(richSerialOut.Text);
            Thread.Sleep(1000);
        }

但是,我无法使用Invoke方法获得布尔结果,因此我尝试将结果放入字符串中并测试是否适合,但我无法做到这一点。

  void GetStableReading(SerialPort VarPort)
            {
                ScalePort.DiscardOutBuffer();
                object[] StabilityCommand = { "", VarPort.ReadExisting() };
                this.Invoke(d, StabilityCommand[0]);
                while (Scale_weight == "SI\r\n" || Scale_weight == "")
                {
                    //richSerialOut.Text = VarPort.ReadExisting();
                    ScalePort.DiscardOutBuffer();
                    Scale_weight = "";
                    Thread.Sleep(1000);
                    ScalePort.Write("S" + "\n");
                    this.Invoke(d, StabilityCommand[1]);
                }

                    database.Add(Scale_weight);
                    Thread.Sleep(1000);


            }



void SetText(string message)
            {
                richOut.Text = message;
                Scale_weight = message;
                    richOut.Update();
            }

有人有更直观的方法吗?

我需要通过串行端口发送一个字符串“ S \ n”。 所需的字符串结果将在“ S X.XXX Kg \ n”中,其中S定义稳定的读数,而X.XXX是砝码。

0 个答案:

没有答案