Извиняюсь за ленивый вопрос, для тех, кто найдет его в будущем, нет ничего, что мешало бы вам создавать потоки в приложении VSTO. Тестовые подпункты ниже могут быть использованы для подтверждения этого:
Private Sub Button3_Click(sender As Object, e As RibbonControlEventArgs) Handles Button3.Click
Dim myData As String() = New String() {"a", "b", "c"}
Debug.WriteLine("Starting")
Using signalEv As CountdownEvent = New CountdownEvent(1)
For Each s As String In myData
signalEv.AddCount()
ThreadPool.QueueUserWorkItem(Sub(state)
Try
ProcessData(state)
Finally
signalEv.Signal()
End Try
End Sub,
s)
Next
signalEv.Signal()
signalEv.Wait()
End Using
Debug.WriteLine("all done")
End Sub
Private Sub ProcessData(s As String)
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString & " data: " & s)
End Sub