2015-03-27 8 views
5

Sto eseguendo un programma di form di Windows che fa tutto il suo lavoro su un altro thread. Dopo qualche tempo, l'interfaccia utente si blocca e smette di rispondere. Il thread in background funziona ancora bene (lo vedo dal lavoro svolto).Una prima eccezione casuale di tipo 'System.IndexOutOfRangeException' in exe nella finestra di output

ho avuto questa eccezione:

Una prima eccezione di possibilità di tipo 'System.IndexOutOfRangeException' in exe

Quando ho tracciato la linea di eccezione e corse di nuovo, ho ottenuto questo:

La discussione <No Name> (0x19b4) è terminata con il codice 0 (0x0).

La riga di codice funziona correttamente ma fornisce 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: ho visto che la produzione fornisce informazioni su ogni eccezione se è catturato o no, ho pensato che è causa di congelamento interfaccia utente ma che non è.

  1. Gentilmente aiutarmi a sbarazzarsi di questa eccezione.
  2. È un'eccezione Unchecked; Ho imparato nei miei studi che .Net non ha eccezioni non controllate. Per favore chiariscilo per mia comprensione.
+0

Perché non inserisci la linea tempcollection [0]. Gruppi ["dati"]. Valore all'interno dell'istruzione if "if (tempcollection.Count! = 0)"? Se il conteggio è 0, "string ThisDiv = tempcollection [0] .Groups [" data "]. Value;" genererà un'eccezione "Fuori intervallo". –

risposta

2

l'espressione regolare non potrebbe aver restituito un valore di gruppo e tempcollection [0] .Gruppi [ "data"] potrebbe non essere impostato di conseguenza l'indicizzatore sul gruppo sarebbe fallito e si potrebbe ottenere un indice di eccezione gamma provare aggiungendo un controllo null sullo stesso prima di provare ad ottenere un valore da esso.

Provare a verificare la regex sui dati di input per verificare che quanto sopra sia vero su qualsiasi strumento di espressione regolare.

+0

lasciami controllare, Neeraj è un'eccezione non controllata, perché non viene catturato – Charlie

+0

Java ha un concetto di definire ciò che un metodo potrebbe non solo attraverso i commenti ma è parte della semantica del codice. .Net a sua volta non ha questa semantica, ma invece tutte queste informazioni fanno parte della documentazione di tali metodi. Quindi per una documentazione del codice dei metodi "int.Parse" (https://msdn.microsoft.com/en-us/library/b3h1hf19(v=vs.110).aspx) si può definire che possa avere queste eccezioni. Dovrai scrivere esplicitamente il tuo codice in base a questa documentazione per gestire eventuali eccezioni previste. Un po 'come di seguito: provare {// logica regex } catch (IndexOutOfRangeException iore) {// altra logica } – Neeraj

Problemi correlati