Hi leute, hab ein Problem mit meinem C# Programm. Und zwar öffne ich den MSComm1 Port, also einen Port, und schicke Daten von nem µC zu dem Port. Nun möchte ich aber später beim Programm überprüfen ob auch tatsächlich Daten am Port ankommen. Sprich irgendwie sowas wie if(MSComm1Port == 1) -> dann ... wenn nicht geb ich ne MessageBox aus. Kann man den Port auf Empfang überprüfen?
John Inkognito wrote: > Hi leute, > > hab ein Problem mit meinem C# Programm. > > Und zwar öffne ich den MSComm1 Port, also einen Port, und schicke Daten > von nem µC zu dem Port. Meinst Du etwa einen SerialPort? Ab .NET 2.0 gibt es das: http://msdn.microsoft.com/de-de/library/system.io.ports.serialport_members(VS.80).aspx > > Nun möchte ich aber später beim Programm überprüfen ob auch tatsächlich > Daten am Port ankommen. Sprich irgendwie sowas wie if(MSComm1Port == 1) > -> dann ... if (MSComm1Port.BytesToRead > 0) { ... } else // MessageBox ausgeben. > > wenn nicht geb ich ne MessageBox aus. Kann man den Port auf Empfang > überprüfen?
Danke für die schnelle Antwort. Also ich hab meinen µC gerade nicht da, hab also die Zeile in der der Port geöffnet wird als Kommentar markiert, da sich sonst .NET aufregt. so -> //MSComm1.Open(); jetzt habe ich die if-Anweisung wie von dir beschrieben ausprobiert, aber es funktioniert nicht. .NET regt sich über die Anweisung if (MSComm1.BytesToRead > 0) auf. Mein Code sieht grad so aus. private void button1_Click(object sender, EventArgs e) { if (MSComm1.BytesToRead > 0) { ... } else{...} } Also meint Port ist zwar nicht offen, aber das Programm sollte ja nur erkennen ob Daten ankommen oder nicht, und da der Port ja zu ist kommen keine Daten, somit soll es in die else-Anweisung springen. Aber es tut sich nichts. Wie gesagt, .NET kompiliert das Programm nichtmal, wegen oben genannter Zeile!?
Wenn du vernünftige Antworten haben willst, dann solltest du mal
überlegen, ob wohl irgendjemand mit einer Aussage wie dieser
> .NET regt sich über die Anweisung if (MSComm1.BytesToRead > 0) auf.
etwas anfangen kann.
Anruf in der Werkstatt: Mein Auto geht nicht. Was könnte das sein?
Ich kann nicht mehr sagen als das sich .NET darüber aufregt. Beim kompilieren wird die Zeile gelb unterstrichen... das war's. Keine genaue Angabe zum Fehler selber. Schätze dass liegt daran dass einfach kein Port geöffnet ist. Also mein bisheriger Code...
1 | private void Form1_Load(object sender, EventArgs e) |
2 | {
|
3 | //Programm in die Mitte des Bildschirms setzen
|
4 | CenterToScreen(); |
5 | |
6 | //Seriellen Port Konfigurieren
|
7 | MSComm1.PortName = "COM8"; |
8 | MSComm1.BaudRate = 57600; |
9 | MSComm1.DataBits = 8; |
10 | MSComm1.Parity = Parity.None; |
11 | MSComm1.StopBits = StopBits.One; |
12 | |
13 | //Seriellen Port öffnen
|
14 | //MSComm1.Open();
|
15 | |
16 | MSComm1.Encoding = Encoding.ASCII; |
17 | }
|
18 | |
19 | //Test-Button
|
20 | private void button1_Click(object sender, EventArgs e) |
21 | {
|
22 | if (MSComm1.BytesToRead > 0) |
23 | {
|
24 | ...
|
25 | }
|
26 | else{...} |
27 | }
|
Und wie oben schon erwähnt, geht es um die Zeile if (MSComm1.BytesToRead
> 0) welche gelb unterstrichen wird und ein weiteres Benutzen des
Programms verhindert!
Was Karl heinz meint: Wie sieht denn die Aufregung von .NET genau aus? Welche Version vom Visual-Studio verwendest Du? Welchen Datentyp hat denn MSComm1? ...
Und wenn keine genaue Fehlermeldung angezeigt wird (was es übrigens nicht gibt, Du mußt vielleicht mal im Menü "Ansicht (View), Fehlerliste (Error List)" schauen. Ansonsten halte mal den Mauszeiger über die gelb unterstrichen Stelle...
John Inkognito wrote: > Ich kann nicht mehr sagen als das sich .NET darüber aufregt. > Beim kompilieren wird die Zeile gelb unterstrichen... das war's. Keine > genaue Angabe zum Fehler selber. Meldung wenn Du mit der Maus auf die gelb unterstrichene Zeile fährst? > Schätze dass liegt daran dass einfach > kein Port geöffnet ist. Falsch, beim Kompilieren kann das Port noch gar nicht offen sein. > Also mein bisheriger Code... Bitte poste den gesamten Code, aber auf's Minimum reduziert, damit nur noch das Wesentliche drinsteht. Und wie Markus V. schrieb: Welche C# Version (resp. Visual Studio) verwendest Du?
Also ich hab das jetzt nochmal mit C# 2008 Express Edition ausprobiert (hatte vorher nur so ein dritt-anbieter Programm). Da wird die Zeile zwar auch gelb markiert, aber mit einem Hinweis. Und zwar steht da: ------------- InvalidOperationExecption wurde nicht behandelt. Der Anschluss ist geschlossen. ------------- Ich versteh das aber nicht. Auch wenn der Anschluss geschlossen ist soll das Programm in die else-Anweisung hupfen, da ja keine Daten ankommen. Wisst ihr weiter?
Aha! Eine Exception ist keine Fehlermeldung vom Compiler! > Aber es tut sich nichts. Wie gesagt, .NET kompiliert das Programm > nichtmal, wegen oben genannter Zeile!? Musst halt den Port zuerst öffnen, d.h. das ...Open() wieder ent-kommentieren. > Also ich hab meinen µC gerade nicht da, hab also die Zeile in der der > Port geöffnet wird als Kommentar markiert, da sich sonst .NET aufregt. ?????????????????????????????? Wenn Dein µC einbe virtuelle serielle Schnittstelle darstellt, dann versuch es mangels µC mal auf einer Standard-Schnittstelle ("COM1).
AHHHHHHHHHHH jetz gehts. Der Fehler lag darin dass ich "COM8" angegeben hab. COM8 gibt es aber auf meinem PC nicht, nur auf dem Laptop bei dem ich begonnen hab das Programm zu schreiben!! (wie severino gesagt hat). Dankeschön, war sehr hilfreich. PS: nochwas, wisst ihr/du vielleicht auch wie ich im Programm die linke/rechte Maustaste drücken lassen kann (virtuell sozusagen)? Sprich wenn ich in ne Textbox z.b. 1 Eingebe wird die linke Maustaste gedrückt (dort wo sich die Maus gerade befindet)?
Über die Win-API kannst du Maus/Tastatureingaben simulieren (Siehe http://pinvoke.net/default.aspx/user32/SendInput.html)
Danke. Hat sich schon erledigt. Kann nun linke und rechte Maustaste simulieren. Vielen Dank leute, habt mir sehr weiter geholfen!
John Inkognito wrote: > Danke. > > Hat sich schon erledigt. Kann nun linke und rechte Maustaste simulieren. Wie?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.