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:
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 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.
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:
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.