2015-03-27 31 views
5

Używam programu formularzy systemu Windows, który wykonuje wszystkie swoje prace w innym wątku. Po pewnym czasie interfejs użytkownika zawiesza się i przestaje odpowiadać. Wątek w tle nadal działa dobrze (widzę to z wykonanej pracy).Pierwsza szansa wyjątek typu "System.IndexOutOfRangeException" w exe w oknie wyjściowym

mam ten wyjątek:

Pierwsza szansa wyjątek typu 'System.IndexOutOfRangeException' w exe

Kiedy prześledzić linię wyjątku i prowadził ją ponownie, mam to:

Wątek <No Name> (0x19b4) został zakończony kodem 0 (0x0).

Linia kodu działa dobrze, ale daje 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: Widziałem, że wyjście podaje informacje o każdym wyjątku czy jest on złapany lub nie, myślałem, że jest przyczyną zamrożenia UI, ale to nie jest.

  1. Uprzejmie pomóż mi pozbyć się tego wyjątku.
  2. Czy jest to niesprawdzony wyjątek; Dowiedziałem się w moich badaniach, że .Net nie ma niezaznaczonych wyjątków. Wyjaśnij to dla mojego zrozumienia.
+0

Dlaczego nie wstawić linii tempcollection [0] .Groups ["data"]. Wartość wewnątrz instrukcji if "if (tempcollection.Count! = 0)"? Jeśli liczba wynosi 0, "string ThisDiv = tempcollection [0] .Groups [" data "]. Wartość;" rzuci wyjątek "Poza zakresem". –

Odpowiedz

2

regex nie mógł powrócić do wartości grupy i tempcollection [0] .Groups [ „dane”] może nie być ustawiona stąd indekser na grupy i nie będzie można uzyskać indeks z wyjątkiem zakresu spróbować dodając kontrolę zerową na tym samym przed próbą uzyskania z niej wartości.

Spróbuj zweryfikować wyrażenie w danych wejściowych, aby sprawdzić, czy powyższe ustawienie jest prawdziwe w każdym narzędziu do wyrażenia regularnego.

+0

Pozwól mi to sprawdzić, Neeraj jest odznaczony wyjątek, dlaczego nie został złapany – Charlie

+0

Java ma pojęcie, co może oznaczać metoda, nie tylko poprzez komentarze, ale jest częścią semantyki kodu. .Net z kolei nie ma tego semantycznego, ale zamiast tego wszystkie takie informacje są częścią takich metod dokumentacji. W związku z tym, dokumentacja kodu metod "int.Parse" (https://msdn.microsoft.com/en-us/library/b3h1hf19(v=vs.110).aspx) definiuje, że może mieć te wyjątki. Będziesz musiał jawnie napisać swój kod na podstawie tej dokumentacji, aby obsłużyć wszelkie spodziewane wyjątki. Trochę jak poniżej: spróbować {// logika regex } catch (IndexOutOfRangeException iore) { // inną logikę } – Neeraj