2009-05-05 11 views
0

でスレッドを生成するときにエラーがある:互換性のない署名ThreadPool.QueueUserWorkitem

メソッド「プライベートサブProcessToolWork()」 委任サブ」デリゲートと署名互換 を持たない WaitCallback(状態オブジェクトとして) '

ここにはどのような取引がありますか?私は、このような方法でスレッドを生成するこのエラーを経験したことはありません。

ここに私のルーチンの定義は以下のとおりです。

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

Private Sub ProcessToolWork() 

End Sub 

は何も悪いことを参照してください?

私もそうのようなこのアイテムの新しいWaitCallback作ってみた:

ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf ProcessToolWork)) 

答えて

3

WaitCallbackは(タイプObjectの)state引数を取ります。たとえそれを無視しても、あなたのメソッドシグネチャに入れなければなりません:

Private Sub ProcessToolWork(ByVal ignored As Object) 

End Sub 
+0

これは、Options Explicitをオンにしている場合にのみ必要ですか? – Daniel

+0

私は分かりませんが、Option Explicitをオフにすると、代わりに実行時に失敗するという疑いがあります。 –

+0

hh。私は怒っている。私はこの方法で成功したスレッドをキューに入れられた以前のプロジェクトでは: ます。Private Sub m_btnCollectData_Click(オブジェクトとしてByVal送信者、System.EventArgsとしてByVal e)はm_btnCollectData.Click Threading.ThreadPool.QueueUserWorkItem(のAddressOf DoDataCollector) End Subの を処理しますPrivate Sub DoDataCollector() 'stuff End Sub 違いは、Webアプリケーションだということです。 – Daniel

0

私はこの同じことを自分で直しました。 "最終的な"コンパイルを行う直前に、Option Strictを "on"にして、このエラーが発生しました。

注:これはOption Strictであり、Option Explicitではありません。

Option Strictを使用してコンパイルしようとする場合は、「Byval ignored As Object」パラメータを指定するだけで済みます。

関連する問題