2

我有一个长时间运行的进程在我的 UI 线程上运行,我无法离开 UI 线程。相反,我正在尝试创建第二个具有等待动画的 UI 线程。这是我用来创建第二个 UI 线程的代码:

Private _busyThread As Thread
Private _waitWindow As WaitWindow 'This is the window with the animation

Private Sub StartBusyIndicator(ByVal busyInfo As BusyInfo)
    _busyThread = New Thread(New ThreadStart(AddressOf ThreadStartingPoint))
    _busyThread.SetApartmentState(ApartmentState.STA)
    _busyThread.IsBackground = True
    _busyThread.Start()
End Sub

Private Function ThreadStartingPoint() As ThreadStart
    _waitWindow = New WaitWindow
    _waitWindow.Show()
    System.Windows.Threading.Dispatcher.Run()
End Function

我怎样才能在需要时优雅地关闭它?我无法_waitWindow从主 UI 线程访问以关闭它。如果我发出_busyThread.Abort()它实际上并没有关闭窗口。

4

1 回答 1

5

您需要使用Dispatcher.BeginInvoke来关闭窗口:

这会将关闭窗口的调用编组到新窗口的线程中。

不过,这不会关闭该线程。为此,请尝试:

_waitWindow.Dispatcher.BeginInvoke(Sub()
         _waitWindow.Dispatcher.BeginInvokeShutdown(DispatcherPriority.Background)
         _waitWindow.Close()
    End Sub)

我的博客上有一篇文章详细讨论了这个问题以及其他问题。它在 C# 中,但可以很容易地转换为 VB.Net。

请注意,从长远来看,弄清楚如何将长时间运行的进程移出主线程将是一个更好的解决方案,因为这仍然会使您的应用程序对 Windows 和您的最终用户没有响应。

于 2013-08-05T21:03:04.340 回答