Problema backgroundworker

venerdì 15 febbraio 2008 - 12.12

ReRosso Profilo | Junior Member

Ciao ragazzi...

Ho un problema con il componente backgroundworker in un'applicazione vb.net 2005.
Non riesco ad intercettare gli errori...
Esempio:

Private Sub bw_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bw.DoWork

' eseguo alcune operazioni

End Sub
-------------------
Private Sub bw_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bw.RunWorkerCompleted
If Not (e.Error Is Nothing) Then
' rileva errore
ElseIf e.Cancelled Then
' operazione bloccaa da utente
Else
' tutto ok
End If
End Sub

* il problema e' che se si verifica un eccezione nel codice della funzione "Do work" siccome non c'e' un try-catch esecuzione viene boccata...ma se si manda avanti da debugger, si vede che l'esecuzione passa alla funzione "runworkercomplete" e l'errore viene rilevato, cioe' passa da ....e.error is nothing...(fin qui tutto bene). Inserisco allora un try-catch in "do work", in modo che l'esecuzione non venga fermata ma a questo punto all'ingresso della funzione "runworkercomplete" lo stato di errore non viene piu' rilevato e l'esecuzione prosegue come se fosse tutto ok...

Dove sbaglio?????

aiedail92 Profilo | Expert

Ciao

É giusto che se inserisci un blocco Try Catch l'errore non venga più mostrato, perchè l'eccezione è stata intercettata (quindi è come se non fosse avvenuta) all'interno del blocco di codice che l'ha generata.

Per risolvere potresti inserire all'interno del metodo bw_DoWork una variabile bool, dove memorizzi se si è verificato un errore, impostandola a false quando la dichiari. Quindi nel blocco catch la imposti su vero, e alla fine del metodo la controlli con un if, e se è true generi tu un'eccezione, magari anche personalizzata.

In questo modo il codice che avevi nel bw viene eseguito tutto come prima, e l'eccezione, se necessario, viene segnalata comunque.

Luca

ReRosso Profilo | Junior Member

Be'!!!

Avevo già pensato a qualche cosa del genere....speravo solo che si potesse gestire in modo meno "casereccio"....comunque l'importante è che funzioni..

Grazie mille e ti accetto al volo la risposta
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5