BackgroundWorker vs Try/Catch?

Hi. I have an app that spawns a couple of BackgroundWorkers. The process works perfectly when all the target servers are available.

For testing purposes, I added some non-existant servers to the mix.

The problem is in the Try/Catch block of the background process. I have to connect to a SQL Server first, then do stuff. Even though I handle the problem to gracefully exit, I keep getting the message in Debug mode.

TargetInvocationException was unhandled
- Exception has been thrown by the target of an invocation.
-InnerException.Message: {"Object reference not set to an instance of an object."}

I thought maybe this was a noob question similar to VB6's option "Break on all errors/Break on unhandled errors," but I don't have ths problem on first-level Try/Catch blocks.

Simplified Code:

Function Catalog_Datasource( _
ByVal Datasource As String, _
ByVal worker As BackgroundWorker, _
ByVal e As DoWorkEventArgs) As String

Dim result as String = ""

Try
'Connect to SQL Server
Catch ex As Exception
GoTo Err_Handler
End Try

'do stuff<- I hit the error doing stuff
result = "Completed"

Return result
Exit Function

Err_Handler:
result = "Error"

End Function

[1890 byte] By [JFoushee] at [2007-12-29]
# 1

I don't see any error handling where you say you're getting an error, perhaps this is due to your simplified code. I'd also not recommend putting a GoTo in your Catch section.

What I'd recommend using a Try...Catch block for the entire routine, not just a small section of it. Something like this:

Function Catalog_Datasource( _
ByVal Datasource As String, _
ByVal worker As BackgroundWorker, _
ByVal e As DoWorkEventArgs) As String

Dim result as String = ""

Try
'Connect to SQL Server
'do stuff
result = "Completed"
Catch ex As Exception
result = "Error"
End Try
Return result
End Function

FrankCarr at 2007-9-4 > top of Msdn Tech,Visual Basic,Visual Basic Language...
# 2

Good grief... this is a noob question...nothing to do with the Backgroundworker.

I need to Return the error, otherwise it will keep going. Thanks for the feedback, it got my brain to jogging when your example worked.

Function Catalog_Datasource( _
ByVal Datasource As String, _
ByVal worker As BackgroundWorker, _
ByVal e As DoWorkEventArgs) As String

Dim result as String = ""

Try
'Connect to SQL Server
Catch ex As Exception
GoTo Err_Handler
End Try

'do stuff
result = "Completed"

Return result
Exit Function

Err_Handler:
result = "Error"
Return result

End Function

JFoushee at 2007-9-4 > top of Msdn Tech,Visual Basic,Visual Basic Language...