c# - 从单独的后台工作人员更改表格

标签 c# multithreading serial-port

我有一个窗体,该窗体在加载时启动循环后台工作程序,该后台工作程序每半秒钟从USB设备获取数据。
程序从USB设备接收到新数据后,它将运行一个功能。_Dowork函数具有

while (true)
{
    portConnection.Write("?");
    Thread.Sleep(50);
}

然后,我有一个单独的例程,该例程在收到数据时运行
private void portConnection_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
}

由于该函数显然在单独的线程上,因此该例程无法再以原始形式设置值。
如何使该例程能够影响原始形式?

最佳答案

尝试这样的事情:

private void InvokeIfRequired(Control target, Delegate methodToInvoke)
{
    if (target.InvokeRequired)
        target.Invoke(methodToInvoke);
    else
        methodToInvoke.DynamicInvoke();
}

在您的ProcessStatsReceived中调用该方法,然后在methodToInvoke中执行您的工作...

您可以在ProccessStatusReceived中像这样使用它:
InvokeIfRequired(this, new MethodInvoker(delegate() { this.lblStatus.Text = (string)e.Data; }));

关于c# - 从单独的后台工作人员更改表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11842373/

相关文章:

ubuntu - 如何在设备连接时自动设置波特率?

c - 如何编写Linux内核模块用于与arduino的串行通信?

c# - 从 WPF 中的页面内调用公共(public) MainWindow 函数

c# - Tesseract OCR - 如何训练这样的图像

c# - XPath 选择匹配的节点

java - 即使线程关闭后, Activity 线程计数也不会减少

boost - 如何确定是否有字节可从 boost :asio:serial_port 读取

C# 线程安全的 getter 性能差异

java - 正确的 ActiveMQ 生产者并发性

c++ - 寻找提供类似于 Google Go channel 功能的 C 或 C++ 库