Wie meine Vorposter geschrieben haben darf Read nicht static sein. Also
bei der Read Method das static weg, genauso bei _continue und
_Serialport.
Vermutlich hast du es Static gemacht, weil sonst folgende Zeile nicht
funktioniert:
1 | Thread readThread = new Thread(Read);
|
mach hier nur die deklaration im Klassenscope und die Initialisierung im
CTor, dann funktionierts.
Zum Invoke:
Hier musst du dich auf den GUI-Thread Synchronisieren, das läuft
folgendermasen:
1 | delegate void ChangeTxtReciveTextDelegate (string newText);
|
2 |
|
3 | private void ChangeTxtReciveText (string newText){
|
4 | if(txtRecieve.InvokeRequired) //Wenn eine Synchronisierung erforderlich ist: Selbstaufruf, allserdings auf GUI-Thread umgebogen
|
5 | txtRecieve.Invoke(new ChangeTxtReciveTextDelegate (ChangeTxtReciveText), newText);
|
6 | else //Ansonsten Zugiff erlaubt, Text Ändern
|
7 | txtRecieve.Text = newText;
|
8 | }
|
9 |
|
10 | public void Read()
|
11 | {
|
12 | while (_continue)
|
13 | {
|
14 | try
|
15 | {
|
16 | string message = _serialPort.ReadLine();
|
17 | MessageBox.Show( "Selected Item Text: " +message );
|
18 |
|
19 | ChangeTxtReciveText(message);
|
20 | //txtRecieve.Text = message;
|
21 | }
|
22 | catch (TimeoutException) { }
|
23 | }
|
24 | }
|
Eventuell wäre der Backgroundworker für dich besser geeignet, der nimmt
dir quasi die gesammte Synchronisierung ab.
Hier hast du auch noch ein bisschen was zum Lesen über Threading mit
GUI-Zugriff: http://www.mycsharp.de/wbb2/thread.php?threadid=33113
greets