C# StreamReader auslesen von Textdateien

PeterParty

Lt. Junior Grade
Registriert
Aug. 2008
Beiträge
282
Hi@ALL

Ich möchte eine kleine News anzeige in ein Programm hinzufügen.

Hier erstmal der Code:

Code:
        private void Form1_Load(object sender, EventArgs e)
        {
            IsConnectionAvailable();

            if (label1.Text == "Die Verbindung zum Server wurde hergestellt")
            {
                webClient.DownloadFileAsync(new Uri("http://www.XXX/news.txt"), @"c:\news.txt");
                if (File.Exists(@"c:\news.txt"))
                {
                    StreamReader reader = new StreamReader(@"c:\news.txt", Encoding.Default);
                    string news = "";
                    news = reader.ReadToEnd();
                    label3.Text = news;
                }

                else
                {
                    MessageBox.Show("Es können keine News angezeigt werden!");
                }


            }

            else

            {
                label3.Text = "Es können keine News angezeigt werden!";
            }
        }


Das Problem ist das er im label1 nichts anzeigt, ich habe mal Haltepunkte gesetzt und mit F11 jeden punkt einzeln gemacht, dann funktioniert alles !

Woran kann das liegen?

MfG
Peter
 
Ist schon länger her, dass ich mich C# auseinander gesetzt habe, aber ich vermute, es liegt an dem Befehl "DownloadFileAsync". Dieser ermöglicht ja, dass das Programm - ohne aufs Ergebnis zu warten - weiter machen kann. Da das beim Pogrammstart aber nicht schnell genug geht, die Datei runterzuladen und zu erstellen, wird nichts angezeigt. Wenn du dagegen alles zeile für zeile ausführst, bleibt eben Zeit genug, so dass es dann funktiniert.
Habe es nicht getestet, nur so ne Idee von mir.
 
Ohne Ahnung von C# zu haben mal ins blaue - du lädst async eine Resource (es wird nicht geblockt) und gibst dem Ladevorgang natürlich keine Zeit abgeschlossen zu werden (was ja auch sinnvoll ist, innerhalb eines UI), bevor du die Resource schon aufs Label knallen willst. Dazu passt auch deine Beschreibung, dass es mit Breakpoints funktioniert, denn da gibst du ihm genug Zeit zum Laden.
Du müsstest also ein Event abfangen, wenn der Ladevorgang abgeschlossen ist und dann das Label setzen. Dazu kenne ich aber die API zu schlecht. ;)

Edit: ach sieh an, über mir war einer schneller. :D
 
Hi,

Wenn nur alle Probleme so leicht zu lösen wären ;=)

Mit DownloadFile statt DownloadFileAsync funktioniert es :=)

Danke
 
Leg das txt-File mal woanders ab. Ich denke er kann nicht direkt auf C: zugreifen. Und um die Exception zu sehen, drücke Strg+D+E und setze dann das zweite Häckchen links. So kannst du die Runtime Exceptions beim debuggen sehen.
 
Es liegt definitiv, wie schon geschrieben, am asynchronen Vorgang. Das ganze mit downloadfile zu hole geht natürlich, ist aber unschön weil die UI gebockt wird. Wenn du es asynchron machst musst du das DownloadFileCompleted Event abonnieren und im eventhandler die Datei auswerten.
Gibt es eigentlich einen Grund warum du es als file lädst? Ich würde das ganze so machen:

Code:
        private void GetNews()
        {
            WebClient webClient = new WebClient();
            webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
            webClient.DownloadStringAsync(new Uri("http://www.XXX/news.txt"));
        }

        void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                label3.Text = e.Result;
            }
        }
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben