Inter-threads non valide (Comment accéder à WinForm éléments à partir d'un autre module?)

J'ai un module avec un événement pour le port série sygnal

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

où DataReceived est

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

et ProcessData est en invoquant WinForms méthode

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

qui est

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() + " ";

mais quand il essaye d'accéder à textBox1 j'obtiens:

Inter-threads non valide: le Contrôle "textBox1' accessible à partir d'un thread autre que le thread qu'il a été créé.

Donc, la question est de savoir Comment accéder à WinForm éléments à partir d'un autre module événements?

Peut-Être MethodInvoker?

OriginalL'auteur Cynede | 2012-10-11