У меня есть окно WPF, загрузка которого занимает около 5 секунд. Я хочу сообщить пользователю удобное сообщение и не уверен, что это лучший способ сделать это. Две вещи, о которых я могу думать:
1. Откройте диалоговое окно с сообщением, которое исчезнет после загрузки главного окна.
2. Используйте панель в главном окне, чтобы показать сообщение и загрузить интерфейс в скрытую панель. После загрузки переключите видимость, чтобы панель прогресса загрузки была скрыта, и сделайте панель пользовательского интерфейса видимой.
Я уже реализовал приложение с вариантом 1, но у меня возникают следующие проблемы:
1. Иногда приложение генерирует исключение Thread.Abort, которое перехватывается обработчиком необработанного исключения приложения.
2. Пользователь может закрыть диалоговое окно прогресса, но главное окно продолжает загружаться в любом случае.
Моя реализация диалогового окна прогресса довольно проста. Он использует обычный диалог с сообщением, а затем я написал вспомогательный класс для управления этим:
public class ProgressWaitDialogHelper : IDisposable
{
private Thread _thread = null;
private ProgressWaitDialog _waitDialog;
public void ShowDialog()
{
ThreadStart threadStart = new ThreadStart(ShowDialogAsync);
_thread = new Thread(threadStart);
_thread.SetApartmentState(ApartmentState.STA);
_thread.Start();
}
public void Dispose()
{
if ((_thread != null) &&
(_thread.IsAlive))
{
_thread.Abort();
_thread = null;
}
}
private void ShowDialogAsync()
{
_waitDialog = new ProgressWaitDialog();
_waitDialog.ShowDialog();
}
}
Мой код вызова:
using (ProgressWaitDialogHelper waitDialog = new ProgressWaitDialogHelper())
{
waitDialog.ShowDialog();
// Do long running UI update loading here.
}
Кто-нибудь знает, как я могу решить проблемы, которые у меня возникают?
Кроме того, лучше перейти к решению 2?
Или есть какой-то другой способ сделать это более соответствующим WPF?
ТИА