Почему потоки в этих двух методах разные? - PullRequest
1 голос
/ 24 января 2011

Посмотрите на код ниже.

Здесь я создаю поток, устанавливаю его имя и запускаю его:

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

В fileCreatedHelper, Thread.CurrentThread не возвращает мне нить, которую я создал выше.Почему это?Когда я ставлю точки останова и смотрю на их ManagedThreadIds, они разные.

Идеи / мысли?Спасибо!

Ответы [ 2 ]

1 голос
/ 24 января 2011

Потому что, когда вы находитесь в ветке ELSE, вы были вызваны, а CurrentThread является основным (GUI) потоком. Не тема, созданная на шаге 1.

Вам понадобится дополнительный метод:

  • один для обработки файла в отдельном потоке. Рассмотрим другой механизм передачи имени файла.
  • один, чтобы «использовать» результаты в графическом интерфейсе. Для этого нужен шаблон InvokeReq / Invoke.
1 голос
/ 24 января 2011

Вызывая New Thread(...).Start(), вы создаете новый поток.

Вызывая Me.Invoke(...), вы выполняете свой код в потоке пользовательского интерфейса и заставляете новый поток ждать код напоток пользовательского интерфейса, чтобы закончить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...