Werbung
Text = Schnittstelle.ReadLine();
listBox1.Invoke(lbRecievedDelegate,new object[]{Text});
hab ich nun so gelöst..wenn ichs programm ausführe
kam zuerst ein timeout,hab ich denn rausgenommen
nun hängt sich das programm auf und es kommt folgende meldung:
Der E/A-Vorgang wurde wegen eines Threadendes oder einer Anwendungsanforderung abgebrochen
oh man.. hab nur mit anderen terminal gesendet
kommt bei mir wieder das:
Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement Form1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.
-.-
Die String Variable RecievedLine deklarierst du in der SerialPortDataRecieved Methode (Bei dir Nebenthread) Die Methode würde dann so aussehen:
Bitte verwende auch absofort die Code Tags und achte ein bisschen auf die Formatierung deines QuellcodesCode:void Nebenthread(object sender, SerialDataReceivedEventArgs e) //Diese Methode wird ausgelöst. Wurde vorher abonniert { string RecievedLine = serialPort.ReadLine(); lbRecieved.Invoke(lbRecievedDelegate,new object[]{RecievedLine}); }
hey..
einfach mal eben kurz eine frage
was spricht gegen diesen befehel=
CheckForIllegalCrossThreadCalls = false;
?
In welchem Zusammenhang willst du den verwenden ?
um den threadübergreifenden fehler zu umgehen. würde wunderbar klappen
man benötigt kein invoke oder delegate...
denn ich will die daten die ich empfange auch weiter verarbeiten.. muss ich doch wieder alles mit delegate machen usw ?!
Wenn ich jetzt aber eine zweite Textbox einfüge
kommen meine gesendeten ASCII Zahlen doppelt an
also wenn ich 12 sende zeigen beide textboxen 1212 an
ich will aber 12 13 senden.. und die textboxTemp soll 12 anziegen und textboxLuft soll 13 anzeigen.
und das andere ist wenn die zahlen in der textbox angezeigt sind und ich wieder zahlen sende sollen auch nur die wieder angezeigt werden, nun werden diese einfach vorne mit rangeschrieben
}
void InvokeLBRecieved(string Data) //Parameter stimmen mit der Deklaration des Delegaten überein
{
textBoxTemp.AppendText(Data);
textBoxLuft.AppendText(Data);
//listBox1.Items.Add(Data);
}
void Nebenthread(object sender, SerialDataReceivedEventArgs e) //Diese Methode wird ausgelöst. Wurde vorher abonniert
{
string Text = Schnittstelle.ReadExisting();
textBoxTemp.Invoke(Textfeld, new object[] { Text });
te
Sorry auch wenn das jetzt etwas hart klingen mag. Kauf dir ein gutes Grundlagenbuch zu C# und arbeit das durch. Wenn du dir anschaust was die Methode InvokeLBRecieved(string Data) macht, sollte dir ziemlich schnell klar werden warum beide Textboxen das gleiche anzeigen. Außerdem würde ich dir empfehlen statt einer TextBox eine Listbox zur Datendarstellung in dem Fall zu verwenden
ja.........
mit der doppelten anzeige habs ich schon hinbekommen
ich erlese mir alles aus dem internet. ist kein leichtes! .. bin seit 3 wochen dabei
Lesezeichen