2011-01-23 6 views
1

以下のコードを見てください。これら2つの方法のスレッドが異なるのはなぜですか?

ここで私は、スレッドを作成し、その名前を設定し、それを起動します。Thread.CurrentThreadが私を取得していない、fileCreatedHelper

Private Sub fileCreatedHelper() 
    If Me.InvokeRequired Then 
     Me.Invoke(New MethodInvoker(AddressOf fileCreatedHelper)) 
    Else 
     Dim currentThread = Thread.CurrentThread ' NOT WORKING! 
     Dim fileName = currentThread.Name 
     ' do more stuff that requires fileName 
    End If 
End Sub 

:これはスレッドでサブある

Private Sub fileCreated(sender As Object, e As FileSystemEventArgs) 
    Dim processFileThread As Thread = New Thread(AddressOf fileCreatedHelper) 
    processFileThread.Name = e.FullPath 
    processFileThread.Start() 
End Sub 

を上記で作成したスレッド。どうしてこれなの?ブレークポイントを入れてManagedThreadIdsを見ると、それらは異なっています。

アイデア/思考?ありがとう!

答えて

1

ELSEブランチに入っているときに、あなたが呼び出され、CurrentThreadがメイン(GUI)スレッドであるためです。別のスレッドでファイルを処理するために

  • 1:あなたがステップ1で

    を作成したスレッドあなたは余分な方法を必要とするわけではありません。ファイル名を渡す別のメカを考えてみましょう。

  • GUIで結果を '使用する' InvokeReq/Invokeパターンが必要です。
1

New Thread(...).Start()を呼び出すと、新しいスレッドが作成されます。

Me.Invoke(...)を呼び出して、UIスレッドでコードを実行し、新しいスレッドがUIスレッドのコードを終了するのを待ちます。

関連する問題