Ich möchte eine serielle Zeichenfolge und Anzeige in einem Textfeld erhalten, habe gestern eine Frage zur Verwendung des Hintergrundarbeiters gestellt, ich habe viel Hilfe bekommen, danke, konnte aber immer noch nicht lösen . Also habe ich ein neues, einfaches Projekt gestartet: Form 1 hat ein Textfeld, um den Rückgabewert anzuzeigen, 1 Taste, um den COM-Port zu verbinden, 1 Taste, um die serielle Verbindung zu senden. Wenn das Gerät am COM-Port die? gesendet, gibt es eine Zeichenfolge zurück, die ich in dem Textfeld tbEncoderValue anzeigen möchte. Serielle Coms werden von SerialPortClass verarbeitet. In SetText ist der Fehler aufgetreten. Was ist die beste & einfachste Art, in diese Textbox zu schreiben?Serielle Eingabe in Textbox - Kreuzfadenoperation
Form1: EDIT Minimierte verion geschrieben
namespace TestSensor
{
public partial class Form1 : Form
{
public static TextBox tbE = new TextBox();
// create a SerialPortClass object variable and called it sp
SerialPortClass sp = new SerialPortClass();
public Form1()
{
InitializeComponent();
tbEncoderValue.Text = "0000";
}
private void Form1_Load(object sender, EventArgs e)
{
tbE = tbEncoderValue;
}
}
}
SerialPortClass:
namespace TestSensor
{
public class SerialPortClass : Form
{
internal delegate void SerialDataReceivedEventHandlerDelegate(
object sender, SerialDataReceivedEventArgs e);
string InputData = String.Empty;
public SerialPortClass()
{
serialPort1.DataReceived +=
new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived_1);
}
private void port_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine("Data recieved");
InputData = serialPort1.ReadExisting();
if (InputData != String.Empty)
{
SetText(InputData);
}
}
public void SetText(string text)
{
Console.WriteLine("set text");
Console.WriteLine(text);
Form1.tbE.Text = text; //causes cross thread operation error here
}
}
}
Form1.tbE.Text = text; //causes cross thread operation error here
Nach der Lektüre @ Pavieł Kraskouski Kommentar wieder habe ich jetzt habe, wenn die serielle zu InvokeMethod empfangen und eine feste Zeichenfolge angezeigt , aber würdest du bitte string variable übergeben?
public delegate void InvokeDelegate();
public void SetText(string text)
{
Console.WriteLine("set text");
Console.WriteLine(text);
Form1 fm = new Form1();
Form1.tbE.BeginInvoke(new InvokeDelegate(InvokeMethod));
}
public void InvokeMethod()
{
Form1.tbE.Text = "Executed delegate";
}
Versuchen Sie, ein [* minimiert *] (http://stackoverflow.com/help/mcve) Version des Codes zu veröffentlichen, zu erklären, wo der Fehler auftritt. – RandomStranger
Sie können Ihre Steuerelemente nicht in anderen Threads aktualisieren. Sie sollten die 'Control.BeginInvoke()' - Methode verwenden, um Cross-Thread-Operationen für Steuerelemente auszuführen. –
@Bas ich gepostet minimierte Version vor und dann möchte jemand den ganzen Code ... Fehler tritt auf: Form1.tbE.Text = Text; // verursacht Cross-Thread-Operation Fehler hier – chasher