Я пытаюсь развлечь пользователя и показать окно «пожалуйста, подождите» с помощью Marquee во время загрузки отдельного сложного Окна. Я пытаюсь сделать это, загрузив окно в новом потоке, например:
Public Function ShowPleaseWait() As System.Threading.Thread
Dim PleaseWait As New System.Threading.Thread(AddressOf LoadPleaseWait)
PleaseWait.SetApartmentState(System.Threading.ApartmentState.STA)
PleaseWait.IsBackground = True
PleaseWait.Start()
Return PleaseWait
End Function
Public Sub LoadPleaseWait()
Dim window As New windowPleaseWait
Try
window.Show()
System.Windows.Threading.Dispatcher.Run()
Catch e As System.Threading.ThreadAbortException
window.Close()
window = Nothing
End Try
End Sub
В вызывающем коде он вызывает ShowPleaseWait
и сохраняет поток для последующего использования. Чтобы закрыть окно, он вызывает Thread.Abort
в сохраненном потоке. Это, в свою очередь, заставит его войти в Catch
. Я пробовал много разных способов, с уловкой и без.
Это невероятно работает при первом вызове. Однако дополнительные вызовы завершатся ошибкой в window.Show ()
за исключением: Вызывающий поток не может получить доступ к этому объекту, потому что он принадлежит другому потоку.
.
Это действительно меня озадачивает. поскольку окно было создано на одну строку выше вызова window.Show
и является локальным. Как он принадлежит другому потоку? Как я могу это исправить?