Я вставил код, который вы показали здесь, и не могу воспроизвести проблему.(У него есть проблема, но она не вызывает проблему, которую вы описываете.) К сожалению, когда я пробую опубликованный вами код, я могу вызывать ShowPleaseWait столько раз, сколько мне нравится, и я не вижу исключения.
Должно быть, произошло одно из двух.Возможно, вы изменили код, упростив исходный пример, чтобы разместить что-то достаточно маленькое для публикации здесь, и в результате вы, возможно, также устранили проблему.(Если бы мне пришлось рисковать догадкой, было бы так, чтобы ваше Dim-окно как New windowPleaseWait изначально было членом класса, а не локальным, и поэтому вы в конечном итоге используете один и тот же объект окна каждый раз. Это единственное, что нужноЯ думал, что это объяснит описанные вами симптомы.)
В качестве альтернативы, я использую код в другом контексте, чем вы.
Чтобы исследовать последний, я объяснючто я делаю, чтобы опробовать ваш код, чтобы вы могли увидеть, если есть что-то явно отличное от контекста, в котором вы его запускаете. Я создал новое приложение WPF и вставил ваши методы в код MainHindow.xaml.vb,Затем я добавил кнопку в окно, и в обработчике кликов я вызвал ваш метод следующим образом:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click
ShowPleaseWait().Join()
End Sub
Я вызываю Join в возвращенном потоке по двум причинам.Во-первых, я хотел заблокировать основной поток пользовательского интерфейса, чтобы убедиться, что вторичное окно действительно работает в отдельном потоке (что и было).Во-вторых, я хотел убедиться, что поток действительно завершил работу - отключение с прерыванием потока - это очень неортодоксальный способ сделать что-то.(Правильнее было бы закрыть диспетчер, который вы неявно создали в этом потоке, что позволило бы корректно завершить вызов Dispatcher.Run (). Это проблема, о которой я упоминал в начале.)
Чтобы попытаться сделать мой пример похожим на ваш, я закрываю дочернее окно, вызывая Thread.Abort, хотя это не очень хорошая идея - я делаю это в обработчике щелчков для кнопки на этом дочернем элементе.окно.(Мне пришло в голову, что проблема может возникнуть только при вызове Abort для этого дочернего потока из основного потока. Поэтому я также добавил пару кнопок, чтобы позволить мне сделать это таким образом. Без изменений - я все еще могу показать окно изатем уничтожайте поток столько раз, сколько мне нравится, даже не видя описанную вами ошибку.)
Таким образом, либо контекст, в котором вы используете этот код, является причиной его сбоя, либо код, который вы опубликовали.Здесь случайно была устранена проблема.В любом случае, боюсь, требуется больше информации.