Как открыть окно WPF в его собственном потоке, а затем закрыть его?

Я пытаюсь развлечь пользователя и показать окно «пожалуйста, подождите» с помощью 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 и является локальным. Как он принадлежит другому потоку? Как я могу это исправить?

1
задан John Christman 16 September 2010 в 23:44
поделиться