2015-03-27 7 views
5

Ich bin ein Windows-Formular-Programm, das seine ganze Arbeit an einem anderen Thread. Nach einiger Zeit reagiert die Benutzeroberfläche nicht mehr und reagiert nicht mehr. Der Hintergrund Thread funktioniert immer noch gut (ich kann das von der Arbeit sehen).Eine erste Chance Ausnahme vom Typ 'System.IndexOutOfRangeException' in der exe im Ausgabefenster

ich diese Ausnahme bekam:

Eine erste Chance Ausnahme des Typs ‚System.IndexOutOfRangeException‘ in exe

Als ich die Linie der Ausnahme verfolgt und lief wieder, ich habe dies:

Der Thread <No Name> (0x19b4) wurde mit Code 0 (0x0) beendet.

Die Zeile Code läuft gut, aber es gibt eine System.IndexOutofRangeException.

MatchCollection tempcollection = Regex.Matches(document, 
     "(?<data>More information from(.|\\r|\\n)*?</div>)"); 
if (tempcollection.Count == 0) 
{ 
    return Result; 
} 
string ThisDiv = tempcollection[0].Groups["data"].Value; 
// The above line shows exception in Output Window, 
// otherwise it works fine and moves to next line. 

UPDATE: Ich habe die Ausgabe von Informationen gibt über jede Ausnahme zu sehen, ob es gefangen wird oder nicht, dachte ich, dass ist Ursache für UI eiskalt, aber das ist nicht.

  1. Bitte helfen Sie mir, diese Ausnahme loszuwerden.
  2. Ist es eine ungeprüfte Ausnahme; Ich habe in meinen Studien gelernt, dass .Net keine ungeprüften Ausnahmen hat. Bitte klären Sie dies für mein Verständnis.
+0

Warum setzen Sie nicht die Zeile tempcollection [0] .Groups ["data"]. Wert innerhalb der if-Anweisung "if (tempcollection.Count! = 0)"? Wenn der Zählerstand 0 ist, "string ThisDiv = tempcollection [0] .Groups [" data "]. Value;" wird die Ausnahme "Out of Range" auslösen. –

Antwort

2

Die Regex einen Gruppenwert und tempcollection nicht zurückgegeben haben könnte [0] .Gruppen [ „Daten“] möglicherweise nicht damit der Indexer auf Gruppe einen Index außerhalb des zulässigen Bereichs Ausnahme könnten Sie versuchen, bekommen würde scheitern und eingestellt werden Hinzufügen eines Null-Checks auf dem gleichen vor versuchen, einen Wert von ihm zu erhalten.

Versuchen Sie, die Regex auf den Eingabedaten zu überprüfen, um zu bestätigen, dass das oben genannte für jedes Regex-Tool zutrifft.

+0

lassen Sie mich überprüfen, Neeraj ist es unchecked Ausnahme, warum es nicht gefangen – Charlie

+0

Java hat ein Konzept zu definieren, was eine Methode durch nicht nur durch Kommentare, sondern ist Teil der Code-Semantik. .Net wiederum hat diese Semantik nicht, sondern alle diese Informationen sind Teil einer solchen Methodendokumentation. Für eine 'int.Parse' (https://msdn.microsoft.com/de-de/library/b3h1hf19(v=vs.110).aspx) Methoden-Code-Dokumentation definiert, dass es diese Ausnahmen haben kann. Sie müssen Ihren Code basierend auf dieser Dokumentation explizit schreiben, um alle erwarteten Ausnahmen zu behandeln. Etwas wie unten: versuchen { // Regex Logik } catch (IndexOutOfRangeException IORE) { // andere Logik } – Neeraj

Verwandte Themen