Spätes Binden umgehen

12/02/2010 - 19:51 von Martin Speer | Report spam
Hallo zusammen,

ich verwende beim starten meines Threads einen Parameter, das Grundgerüst
sieht so aus:

Private Delegate Sub myDelegateParam(ByVal Param As Object)


Dim myThread As Threading.Thread
myThread = New Threading.Thread(AddressOf Search)
myThread.Start(New Object() {CurrentSearchID})


Private Sub Search(ByVal Param As Object)
If Me.InvokeRequired Then
Dim d As New myDelegateParam(AddressOf Search)
Me.Invoke(d, New Object() {Param})
Else

If Param(0).ToString = CurrentSearchID Then ' Hier gibts das
Problem!

Nun würde ich gerne den Wert (ist ein String) von "Param" innerhalb der
Search-Methode abrufen. Das klappt aber nicht in Verbindung mit Option
Strict On ...
MsgBox(Param.ToString) liefert --> "System.Object[]"
MsgBox(Param(0).ToString) liefert --> "12345" also den richtigen Wert!

Allerdings beanstandet der Compiler Param(0) mit der Meldung: "Option Strict
On làsst spàtes Binden nicht zu."

Mit Option Strict Off funktioniert also alles wunderbar... nur wie mach ich
es richtig?

Mit CType und DirectCast in einen String zu konvertieren habe ich schon
versucht, gibt eine Fehlermeldung zur Laufzeit...

Grüße,

Martin
 

Lesen sie die antworten

#1 Armin Zingler
12/02/2010 - 21:02 | Warnen spam
Martin Speer schrieb:
Hallo zusammen,

ich verwende beim starten meines Threads einen Parameter, das Grundgerüst
sieht so aus:

Private Delegate Sub myDelegateParam(ByVal Param As Object)


Dim myThread As Threading.Thread
myThread = New Threading.Thread(AddressOf Search)

myThread.Start(New Object() {CurrentSearchID})


Private Sub Search(ByVal Param As Object)
If Me.InvokeRequired Then
Dim d As New myDelegateParam(AddressOf Search)
Me.Invoke(d, New Object() {Param})
Else

If Param(0).ToString = CurrentSearchID Then ' Hier gibts das
Problem!

Nun würde ich gerne den Wert (ist ein String) von "Param" innerhalb der
Search-Methode abrufen. Das klappt aber nicht in Verbindung mit Option
Strict On ...
MsgBox(Param.ToString) liefert --> "System.Object[]"
MsgBox(Param(0).ToString) liefert --> "12345" also den richtigen Wert!

Allerdings beanstandet der Compiler Param(0) mit der Meldung: "Option Strict
On làsst spàtes Binden nicht zu."

Mit Option Strict Off funktioniert also alles wunderbar... nur wie mach ich
es richtig?

Mit CType und DirectCast in einen String zu konvertieren habe ich schon
versucht, gibt eine Fehlermeldung zur Laufzeit...



Du kannst auch

myThread.Start(CurrentSearchID)

schreiben. In der Sub Search dann

Param.ToString
oder
Directcast(Param, String)


Wenn du beim Object-Array bleiben willst:

Directcast(Param, Object())(0).ToString
oder
DirectCast(Directcast(Param, Object())(0), String)


Armin

Ähnliche fragen