Autor Beitrag
andy11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Fr 21.05.10 20:16 
Ich habe ein Programm geschrieben, dass Daten von der Seriellen Schnittstelle empfängt und dauernd in eine Richt textbox anzeigt.
Ich mache das Auslesen mit einem Backgroundworker, damit man hinunterscrollen kann während er ausließt. Das ganze startet auch richtig, aber jetzt ergeben sich aus meinem Coding ein Problem:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace SerielleSchnitschtelle
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false//Da sonst: Ungültiger threadübergreifender Vorgang
        }

        private void cmdclose_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void cmdReceive_Click(object sender, EventArgs e)
        {
            Schluss = false;
            backgroundWorker1.RunWorkerAsync();
        }
        
        bool Schluss = false;   
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            do
            {
                serialPort1.Open();
                rtxtReceive.Text += serialPort1.ReadLine() + "\n";
                serialPort1.Close();
            }
            while (Schluss == true);
        }

        private void cmdStop_Click(object sender, EventArgs e)
        {
            Schluss = true;
            backgroundWorker1.CancelAsync();
        }

    }
}


Er macht die Schleife nicht ganz durch, dh er macht sie nur einmal obwohl Schluss = false ist. Frage: Was könnte das für einen Grund haben?

lg andy

Moderiert von user profile iconKha: Zweite Frage entfernt.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 21.05.10 20:57 
user profile iconandy11 hat folgendes geschrieben Zum zitierten Posting springen:
Er macht die Schleife nicht ganz durch, dh er macht sie nur einmal obwohl Schluss = false ist.
Nichts Anderes sagt deine Schleife aus. Denkst du gerade vielleicht an Pascals repeat until ;) ? Einen Boolean auf true zu prüfen ist übrigens unnötig.

user profile iconandy11 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
            CheckForIllegalCrossThreadCalls = false//Da sonst: Ungültiger threadübergreifender Vorgang					
:shock: Ich hoffe, diese "Lösung" hast du nicht bei uns gefunden!
Stört dich das Wörtchen "illegal" darin überhaupt nicht. Suche bitte mal nach Control.Invoke, um das Problem vernünftig zu lösen.

_________________
>λ=
andy11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Fr 21.05.10 21:02 
Zitat:
Nichts Anderes sagt deine Schleife aus. Denkst du gerade vielleicht an Pascals repeat until ;) ? Einen Boolean auf true zu prüfen ist übrigens unnötig.

also wie ich das gelernt habe ist es doch:
do
{
.
.
.
}
while...solange bis (bool = true/false)

und nicht while(bool != true) wie es aber scheinbar funktioniert.
Wieso ist das aber negiert?

Zitat:
Ich hoffe, diese "Lösung" hast du nicht bei uns gefunden!
Stört dich das Wörtchen "illegal" darin überhaupt nicht. Suche bitte mal nach Control.Invoke, um das Problem vernünftig zu lösen.

Wieso sollte ich unnötig viel code schreiben, wenn es mit einer Zeile auch geht?

lg andy
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 21.05.10 21:33 
user profile iconandy11 hat folgendes geschrieben Zum zitierten Posting springen:
while...solange bis
Und jetzt zücken wir unser Wörterbuch und schlagen einmal unter while und einmal unter until nach.

user profile iconandy11 hat folgendes geschrieben Zum zitierten Posting springen:
Wieso sollte ich unnötig viel code schreiben, wenn es mit einer Zeile auch geht?
Weil man für illegalen Code ins Gefängnis kommt :P . Wenn dein Code funktioniert hat, war das reines Glück, das sich nicht jedes Mal wiederholen muss.

_________________
>λ=
andy11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Fr 21.05.10 21:51 
Zitat:
Und jetzt zücken wir unser Wörterbuch und schlagen einmal unter while und einmal unter until nach.

Ich weiß was der Unterschied ist und ich weiß auch was du vorher gemeint hast, jedoch habe ich das so im Informatik Unterricht gelernt, und zwar kam es laut und deutlich vom Lehrer raus !SOLANGE BIS! und deswegen das Missverständnis. Danke aber der Bestätigung.

Zitat:
Weil man für illegalen Code ins Gefängnis kommt :P . Wenn dein Code funktioniert hat, war das reines Glück, das sich nicht jedes Mal wiederholen muss.

naja ob man dafür ins Gefängnis kommt, weiß auch nicht. Aber und jetzt kommt das Aber. Ich habe mein Code 20 mal ausgetestet und es haut noch immer hin, also vermute ich mal das funktionier immer.

Was allerdings mein zweites Problem jetzt ist ist, dass ich den COM1 nicht schließen kann, er lasst sich zwar öffnen, aber nicht schließen.
Er empfängt aber auch keine Daten sondern ist einfach nur am STK500 angehängt muss ich noch sagen, aber das sollte ja nicht ausschlaggebend sein oder irre ich mich?

lg andy
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 21.05.10 23:57 
user profile iconandy11 hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe mein Code 20 mal ausgetestet und es haut noch immer hin, also vermute ich mal das funktionier immer.
Und wenn es beim hundertsten Mal kracht, interessiert es dich nicht mehr? Fakt ist, dass dir niemand garantieren kann, dass das funktioniert - die Hilfe ist da doch eigentlich recht deutlich.

user profile iconandy11 hat folgendes geschrieben Zum zitierten Posting springen:
Was allerdings mein zweites Problem jetzt ist ist, dass ich den COM1 nicht schließen kann, er lasst sich zwar öffnen, aber nicht schließen.
Neue Baustelle, neuer Thread bitte :) .

_________________
>λ=