Finde den fehler nicht-C#

Gast #1276614
Lesenswert?

Hi Leute,

Ich habe folgendes Problem:
mein Programm habe ich soweit fertig aber jetzt da ich mit dem testen 
begonnen habe kommen auch schon die ersten probleme.

Das Programm ist eine C#-Oberfläche die auf das drücken des "start"- 
Knopfes soll über den timer regelmäßig ein kommando Z1 oder z.B. Z2 
senden.
Als Antwort kommt eine Zeichenfolge gesendet von einem microcontroler.

Wenn ich jetzt auf "Start" drücke wir nichts gesendet. Zumindest sehe 
ich es nicht. Ich habe es folgendermaßen getestet:
2 PC wurden per RS232-female-female-kabel verbunden und das Programm das 
ich verwende ist "Hyperterminal". Die PCs haben eine Verbindung die ich 
dadurch festellen konnte das man am ersten PC eingegebene nachrichten am 
zweiten PC sehen konnte. dann starte ich mein programm über microsoft 
visual studio 2005. wenn ich jetz auf start drücke wird beim zweiten PC 
nichts entfangen.
Ich bin ratlos denn soweit ich mir das denke müsste mein Programm 
funktionieren.

LG Son of Oden
Gast #1276642
Lesenswert?

Hast Du schon mal was vom Debugger, Breakpoints, Anschauen von 
Objektdaten, ... gehört? Oder Testausgaben mit Hilfe der Klasse 
System.Diagnostics.Debug, Methoden Write, WriteLine, ...? Infos ins 
Ausgabe-Fenster der IDE schreiben? ...

Gruß
Markus
Gast #1276795
Lesenswert?

Oh... ich dachte es währe jemand so nett um mal kurz über das programm 
drüber zu schaun. Vielleicht wäre ja jemanden etwas essentielles 
aufgefallen das schuld daran sein könnte das nichts gesendet wird.
Solche leute sind hier wohl nicht zu finden. Entschuldigung für die 
Störung.
Gast #1276819
Lesenswert?

Son of Oden schrieb:
> Ich hab aber einen zip vom projekt angehängt... geht das als gast nicht?

Doch. Wie du gerade festgestellt hast, geht es auch als 'Gast'. Du musst 
nur wissen, dass der Anhang verschwindet sobald du auf 'Vorschau' 
klickst.
Gast #1276828
Lesenswert?

Son of Oden schrieb:
> Ich will mich nochmal entschuldigen für meine reaktion vorhin...

Passt scho ;)

> das wars ich hab auf Vorschau geklickt.^^

Das kann übrigens sogar angemeldeten Benutzern passieren :/
Gast #1276836
Lesenswert?

...aber wie Markus schon gesagt hat, kannst du das Programm doch in der 
IDE starten und step-by-step durchlaufen. Dann kannst du evtl. schon 
erkennen, ob das Programm überhaupt alles macht, was du erwartest.
#1276861
Lesenswert?

Leider kann ich Dein Programm nicht kompilieren, weil ich das 
Office-Assembly nicht habe oder es nicht installiert ist:
1
D:\...\Fußbelastungsmessung\Fußbelastungsmessung\Main_Form.cs(10,17): Fehler CS0234: Der Typ- oder Namespacename Office ist im Namespace Microsoft nicht vorhanden. (Fehlt ein Assemblyverweis?)
2
D:\...\Fußbelastungsmessung\Fußbelastungsmessung\Main_Form.cs(436,45): Fehler CS0234: Der Typ- oder Namespacename Office ist im Namespace Microsoft nicht vorhanden. (Fehlt ein Assemblyverweis?)

Üblicherweise postet man den Code derart auf's Minimum reduziert, dass 
gerade noch das Fehlverhalten auftritt, aber ohne überflüssigen Kram.

Jedenfalls ist mir aufgefallen, dass für den Button btnStart kein 
Click-Ereignis eingetragen ist. Im Code existiert zwar
1
        private void btnStart_Click(object sender, EventArgs e)
2
        {
3
            ...
4
        }
aber wenn ich im Entwurfsmodus auf btnClick doppelklicke, wird eine neue 
Funktion
1
        private void btnStart_Click_1(object sender, EventArgs e)
2
        //                         ^^
3
        {
4
            ...
5
        }
erstellt.
Scheint also so, dass die Verknüpfung zwischen btnStart und der 
Ereignisfunktion verloren hat.
Gast #1276920
Lesenswert?

Hi Son of Oden,

Severino R. hat durchaus Recht. Wenn Du Dir die Methode 
InitializeComponent() in der Datei MainForm.Designer.cs, speziell die 
Zeile 112 anschaust, dort wird eine Click-Ereignis-Handler für den 
Export-Button installiert. Gleichartiges fehlt sowohl für den Start- (im 
Bereich der Zeile 50) als auch für den Pause-Button (im Bereich der 
Zeile 60).

Gruß
Markus
#1277899
Lesenswert?

Ein anderer Fehler ist, dass in PortDataRecieved direkt auf 
Steuerelemente der Form zugegriffen wird (labelZone etc). Das 
funktioniert nicht, da nur der Hauptthread auf die Steuerelemente 
zugreifen darf.
D.h. alle Zugriffe müssen mit Invoke an den Hauptthread delegiert werden
bspw. so:
[c]
public delegate void LabelUpdater(String aString);
public LabelUpdater LabelDelegate;

void LabelDelegate(string aString) {
   ...
}

void PortDataRecieved(...) {
    ...
    labelZone[x].Invoke(LabelDelegate, aString);
}

public MainForm() {
    ...
    LabelDelegate = new LabelUpdater(LabelUpdateMethod);
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren