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
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser les formulaires répartiteur.
Ceci fait que le code exécuté dans les formes thread au lieu de la vôtre.
merci!!!! fonctionne très bien
OriginalL'auteur PhonicUK
Essayez d'Utiliser de Code ci-dessous:
espère que cette aide
OriginalL'auteur Mohan