2017-05-12 2 views
2

Hier unten ist der sehr einfache Code für die serielle Schnittstelle liest Lese automatisch: -Serielle Schnittstelle automatisch in C#

public partial class MainForm : Form 
    { 
     public MainForm() 
     { 
     // 
     // The InitializeComponent() call is required for Windows Forms designer support. 
     // 
     InitializeComponent(); 

     // 
     // TODO: Add constructor code after the InitializeComponent() call. 
     // 


     serialPort1.PortName="COM11"; 
     serialPort1.Open(); 

    } 
    void SerialPort1DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     rtBox.Text="Data Received\n"; 
    } 
    void BtnReadClick(object sender, EventArgs e) 
    { 
     rtBox.Text += "Read click" + "\n"; 
    } 

System.InvalidOperationException: Querfäden ungültig Job: Zugriffssteuerungseintrag ‚rtBox‘, wenn verwendet, Ausführungs-Thread und stellen Kontrollen anderen Thread.

Übersetzung in Google übersetzen aus chinesischen Schriftzeichen „Incomplete Thread Job: Der Thread verwendet, um die Kontrolle‚rtBox‘ist aus dem Thread anders zuzugreifen, die die Steuerung festlegt.“

einfach möchte ich nur zeigen, die Meldung „Daten empfangen“ an Rich-Testbox jedoch immer dann, wenn die Daten zu erhalten, gibt es die folgende Ausnahme :.

wissen Sie, warum Dank

+0

den inneren Code in dem UI-Thread ausgeführt wird. verwenden Kontrolle invoke in UI-Thread zu aktualisieren ... –

Antwort

3

WinForm Steuerelemente wie Rich Text Box nur aus zugegriffen werden kann? der Haupt-UI-Thread. serielles Port-Objekt aufruft der Event-Handler von einem anderen

können Sie Ihre Handler, so etwas zu tun, ändern -.

void SerialPort1DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    Invoke(new Action(() => 
    { 
     rtBox.Text="Data Received\n"; 
    }));   
} 

Diese Control.Invoke verwenden, die dann

+2

danken. Roberto .. Es ist perfekt jetzt Arbeit. –

Verwandte Themen