У меня есть длительный процесс, который работает на моем потоке пользовательского интерфейса, который я не могу отключить от потока пользовательского интерфейса. Вместо этого я пытаюсь создать второй поток пользовательского интерфейса, в котором есть ожидание анимации. Вот код, я использую, чтобы создать второй поток пользовательского интерфейса:Обработка второго потока пользовательского интерфейса в WPF
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
из основного потока пользовательского интерфейса, чтобы закрыть его. Если я выдаю _busyThread.Abort()
, он фактически не закрывает окно.
Если ваш дизайн настаивает на запуске в потоке пользовательского интерфейса, что-то, вероятно, не так с ним, и, скорее всего, можно реорганизовать его так, чтобы у вас все еще был только один поток пользовательского интерфейса. В крайне невероятном случае вам действительно нужен второй поток пользовательского интерфейса, вы можете всегда запускать отдельный процесс и использовать именованные каналы для связи между двумя –
. Каков длительный процесс, выполняемый в потоке пользовательского интерфейса? Рид правильно, что процесс должен быть удален с пользовательского интерфейса. – Gauthier
Да, ему нужен рефакторинг. До этого времени я искал быстрое исправление. –