2011-01-23 78 views
1

看看下面的代碼。爲什麼這兩種方法中的線程不同?

在這裏,我創建一個線程,設置它的名稱,並啓動它:

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 

這是一種線程子:

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 

fileCreatedHelperThread.CurrentThread沒有得到我我上面創建的線程。爲什麼是這樣?當我把斷點放入並看看它們的ManagedThreadIds時,它們是不同的。

想法/想法?謝謝!

回答

1

因爲當你在ELSE分支中時,你已經被調用並且CurrentThread是主(GUI)線程。

  • 一個處理一個單獨的線程文件:不是Thread您在步驟1

    您將需要一個額外的方法創建的。考慮另一個Mecahnism來傳遞文件名。

  • 一個'使用'GUI中的結果。那個需要InvokeReq/Invoke模式。
1

通過致電New Thread(...).Start(),您正在創建一個新線程。

通過調用Me.Invoke(...),您在UI線程上執行您的代碼,並使新線程等待UI線程上的代碼完成。

相關問題