Laden...

Forenbeiträge von Fl0 Ingesamt 4 Beiträge

20.08.2010 - 15:59 Uhr

Super, danke dir.

Zwar besteht das Problem mit den MsgBoxen immernoch, liegt aber halt daran, dass die Funktion immer wieder neu aufgerufen wird. Muss halt die Zeit des Timers dann ändern.

edit:// gelöst
Eine letzt Frage habe ich noch (etwas Offtopic):

Kann man verhindern, dass eine Form 2x geöffnet wird? Wenn ich meine Hauptform verstecke (mit Button), erscheint als Tray Icon mein Prog, mit dem dann "new Form1().Show();" ausgeführt wird, also eine die bereits vorhandene "Form1" nochmal geöffnet wird, die Form wurde vorher jedoch nicht beendet (darf sie auch nicht!) sondern nur versteckt:

ActiveForm.ShowInTaskbar = false;
ActiveForm.Visible = false;

Trotz langer Suche im Netz habe ich nix gefunden was das "visible" wieder rückgängig macht, arbeite nur mit ActiveForm.

Danke und MfG
Fl0

20.08.2010 - 15:18 Uhr

Danke euch!

Habe jetzt folgendes gemacht:

public Webseite(string url)
        {
            int tmpCounter = 0;

            while (tmpCounter < 10)
            {
                try
                {
                    this.url = url;

                    //Webseite laden
                    WebRequest req = WebRequest.Create(this.url);
                    WebResponse resp = req.GetResponse();
                    Stream stream = resp.GetResponseStream();
                    StreamReader sr = new StreamReader(stream);

                    string s = sr.ReadToEnd();
                    this.HTML = s;

                    //Tags entfernen
                    Regex textreplace = new Regex("(<[^>]*>)");
                    this.Text = textreplace.Replace(this.HTML, "");

                    // Aktion war erfolgreich
                    tmpCounter = 10;
                }
                catch (ArgumentNullException argNullEx)
                {
                    // counter erhöhren
                    // Bei Verbindungsfeher
                    tmpCounter++;
                }
                catch (WebException argNullEx)
                {
                    tmpCounter = 10;
                    MessageBox.Show("No Internet Connection ! :(");
                }
           }
                 
         }

Problem ist, dass im catch Beispiel "WebException=Null" die Message Box dauernd wieder aufgerufen wird, kann man das verhindern? Denke das liegt ja am Timer der auf ziemlich häufige 1,2 Sek. eingestellt ist und dementsprechend immer wieder die Funktion aufruft.(wird noch geändert)

Würde dann bei der WebException den Timer drastisch erhöhen und sofern alles klappt und man in kein "catch" kommt den TImer wieder erhöhen.

Danke und MfG
Fl0

20.08.2010 - 14:37 Uhr

Danke für die schnellen und hilfreichen antworten.

@esskar Werde ich mit der Methode von The_Mexican machen, danke.

@chavez bin mit der jetzigen voll zufrienden, wieso ändern? Aber Danke für den Tip.

@The_Mexican

So werde ich es wohl machen, habe den Error:

\************** Ausnahmetext **************
System.ArgumentNullException: Der Wert darf nicht NULL sein.
Parametername: input
   bei System.Text.RegularExpressions.Regex.Match(String input)
   bei Tool_Tool.Form1.timer2_Tick(Object sender, EventArgs e) in C:\Visual Studio 2008\Projects\Tool\Tool\Form1.cs:Zeile 418.
   bei System.Windows.Forms.Timer.OnTick(EventArgs e)
   bei System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
   bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Muss also statt "Exception1": "System.ArgumentNullException" oder "ArgumentNullException" benutzen? Und was hat es mit dem "#" auf sich? Würde da eher ne zweite Integer Variable nutzen und die auf z.B. 10 stellen und wenn x sowie die neue Variable 10 erreicht hat ausgeben, dass keine verbindung vorhanden ist.

Danke euch
Fl0

20.08.2010 - 14:05 Uhr

Guten Tag,

ich arbeite seit längerem an einem Programm welches auf ein XML-Interface zugreift und ganz einfach die Daten mit WebRequest ausliest. Mit Hilfe eines Timers werden auf der Form verschiedene Label mit den ausgelesen Werten aktualisiert . Klappt auch alles wie gewollt, nur gibt es ab und zu einen Error. Ich habe Ewigkeiten gedacht ich hätte das Problem gelöst, aber scheinbar war es ein ganz anderes Problem:

Ich bin zu dem Ergebnis gekommen, dass bei schlechter Internetverbindung (oder keiner) ein Error kommt. Jedoch habe ich noch keine Lösung gefunden den Error zu unterdrücken oder zu warten bis eine Verbindung da ist. Aber genug gelabert, vielleicht könnt ihr mir ja helfen:

Form1.cs:

Webseite test = new Webseite("http://www.meineseite.de/api-" + apikey + ".xml");
label1.Text = test.getGuthabenTotal() + "€";

Website.cs:

public Webseite(string url)
        {
            bool reply = CheckInternetConnection();
            if (reply != false)
            {
                this.url = url;

                //Webseite laden
                WebRequest req = WebRequest.Create(this.url);
                WebResponse resp = req.GetResponse();
                Stream stream = resp.GetResponseStream();
                StreamReader sr = new StreamReader(stream);

                string s = sr.ReadToEnd();
                this.HTML = s;

                //Tags entfernen
                Regex textreplace = new Regex("(<[^>]*>)");
                this.Text = textreplace.Replace(this.HTML, "");
            }
        }

        public string getGuthabenTotal()
        {
            Regex titlematch = new Regex(@"(?<=<total.*>)([\s\S]*)(?=</total>)");
            return titlematch.Match(this.HTML).ToString();
        }

Die Funktion "CheckInternetConnection()" (s.o.) habe ich ausproniert ist jedoch keine effektive Lösung:


 public static bool CheckInternetConnection()
        {
            Ping ping = new Ping();

            try
            {
                PingReply reply = ping.Send("www.meineseite.de", 1000);

                return reply.Status == IPStatus.Success;
            }
            catch
            {
                return false;
            }
        }

Der Error besagt, dass string in Regex nicht NULL sein darf, desshalb gehe ich davon aus, dass die Funktion Regex nicht ausgeführt werden kann, da der HTML Code dank schlechter Verbindung nicht ausgelesen wurde. Ziel wäre also Regex zu sagen, dass er nichts machen soll, wenn nichts vorhanden ist - bisher aber nicht gelöst bekommen.

Auf eine Antwort würde ich mich sehr freuen.

Mit freundlichen Grüßen,
Fl0

P.S. den genauen Error werde ich ggb. hinzufügen, wenn er wieder auftritt.