我有一个带有串行端口信号事件的模块
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 元素?