2011-01-23 7 views
1

아래 코드를 살펴보십시오. 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 단계

    당신은 별도의 방법을 필요로 만들었습니다. 파일 이름을 전달하는 다른 메카니즘을 고려하십시오.

  • 하나는 GUI에서 결과를 '사용'합니다. InvokeReq/Invoke 패턴이 필요합니다.
1

New Thread(...).Start()을 호출하면 새 스레드가 생성됩니다.

Me.Invoke(...)을 호출하면 코드가 UI 스레드에서 실행되고 새 스레드가 UI 스레드의 코드가 완료 될 때까지 대기하게됩니다.

관련 문제