2009-05-05 5 views
0

L'erreur est:signatures incompatibles lorsque le fil fraie avec ThreadPool.QueueUserWorkItem

Méthode 'Private Sub ProcessToolWork()' n'a pas une signature compatible avec délégué « délégué Sous WaitCallback (état As Object) '.

Quelle est la situation ici? Je n'ai jamais connu cette erreur engendrant un fil de cette façon.

Voici mes définitions de routine:

Public Sub ProcessWork() 
     ThreadPool.QueueUserWorkItem(AddressOf ProcessToolWork) 
End Sub 

Private Sub ProcessToolWork() 

End Sub 

Voir quelque chose de mal?

J'ai aussi essayé de faire une nouvelle WaitCallback pour cet article comme ceci:

ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf ProcessToolWork)) 

Répondre

3

WaitCallback prend un argument state (de type Object). Même si vous l'ignorez, vous devez le mettre dans votre signature de méthode:

Private Sub ProcessToolWork(ByVal ignored As Object) 

End Sub 
+0

Est-ce seulement nécessaire avec Options Explicit activé? – Daniel

+0

Je ne sais pas - mais je * soupçonne * qu'avec Option Explicit off, il échouerait juste au moment de l'exécution à la place. –

+0

Huh. Je suis vexé. Dans un précédent projet, je faisais la queue avec succès un fil de cette façon: Private Sub m_btnCollectData_Click (expéditeur de ByVal comme objet, ByVal e comme System.EventArgs) Poignées m_btnCollectData.Click Threading.ThreadPool.QueueUserWorkItem (AddressOf DoDataCollector) End Sub Private Sub DoDataCollector() 'stuff End Sub La différence étant qu'il s'agissait d'une application Web. – Daniel

0

Je viens de rencontrer la même chose moi-même. Juste avant de faire une compilation "finale", j'ai tourné Option Strict sur "on", et cette erreur est apparue.

Remarque: C'est Option Strict, pas Option Explicit. Par conséquent, il suffit de fournir le paramètre "Byval ignored As Object" si vous essayez de compiler avec Option Strict on.

Questions connexes