gpt4 book ai didi

c# - 跨线程操作无效(How to access WinForm elements from another module events?)

转载 作者:可可西里 更新时间:2023-11-01 08:53:48 25 4
gpt4 key购买 nike

我有一个带有串行端口信号事件的模块

serialPort.DataReceived.AddHandler(SerialDataReceivedEventHandler(DataReceived));

DataReceived 在哪里

let DataReceived a b =
rxstring <- serialPort.ReadExisting()
arrayRead <- System.Text.Encoding.UTF8.GetBytes(rxstring)
if arrayRead.[0] = 0x0Auy then
ProcessData(a, null)

ProcessData 正在调用 WinForms 方法

let ProcessData(a, b) =
dataProcessor.Invoke(a, b) |> ignore

这是

private void ProcessData(object sender, EventArgs e) {
byte[] m = Core.ncon.ArrayRead;
switch (m[1]) {
case 0x01: {
if (m.Length > 5) {
int myval = BitConverter.ToInt32(m, 3);
textBox1.Text += " val: " + myval.ToString() + " ";

但是当它尝试访问 textBox1 时,我得到:

跨线程操作无效:从创建它的线程以外的线程访问控件“textBox1”。

所以问题是如何从另一个模块事件访问 WinForm 元素?

最佳答案

您需要使用表单调度程序。

FormContaingTheTextbox.Invoke(new MethodInvoker(delegate(){
textBox1.Text += " val: " + myval.ToString() + " ";
}));

这使得该代码在表单线程中而不是在您的线程中运行。

关于c# - 跨线程操作无效(How to access WinForm elements from another module events?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12837305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com