Отдельная формочка с кое-какой анимацией и текстом "Please wait..."
Как ее правильно показывать и прятать?
Причем показ и "прятанье" это два метода которые вызываются принудительно.
Я так понимаю что вариант с BackgroundWorker мне не подходит.
Потому что в нем сразу задаются
DoWork — сюда кладется все ЧТО нужно выполнить (различные вычисления бизнес логики), включая показ Wait window
RunWorkerCompleted — здесь (когда все вызовется) прячется Wait window
но у меня не стоит сейчас задача делать какие-то вычисления в новом потоке. — Только показать когда нужно Wait-window
что-то вроде такого:
ShowWaitWindow();
try
{
DoSomeCalculations();
InitializeNecessaryControlsInView();
ShowNecessaryView();
}
finally
{
HideWaitWindow();
}
Пробовал такой подход:
public class WaitViewHandler
{
private Thread StatusThread;
private WaitView waitView;
public void Start(string aText)
{
//create the thread with its ThreadStart method
StatusThread = new Thread(() =>
{
try
{
waitView = new WaitView();
waitView.textblockText.Text = aText;
waitView.ShowInTaskbar = false;
waitView.ShowDialog();
waitView.Closed += (lsender, le) =>
{
//when the window closes, close the thread invoking the shutdown of the dispatcher
waitView.Dispatcher.InvokeShutdown();
waitView = null;
StatusThread = null;
};
//this call is needed so the thread remains open until the dispatcher is closed
System.Windows.Threading.Dispatcher.Run();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
}
});
//run the thread in STA mode to make it work correctly
StatusThread.SetApartmentState(ApartmentState.STA);
StatusThread.Priority = ThreadPriority.Normal;
StatusThread.Start();
}
public void Stop()
{
if (waitView != null)
{
//need to use the dispatcher to call the Close method, because the window is created in another thread, and this method is called by the main thread
waitView.Dispatcher.BeginInvoke(new System.Action(() =>
{
waitView.Close();
}));
}
}
}
Но что-то Wait-window не всегда прячется.
Бывает что висит по несколько окон.
А иногда при попытке показать(или спрятать) вылетает Exception
Есть решение для такой тривиальной задачи?
Спасибо!
Здравствуйте, AHgpeu, Вы писали:
AH>DoWork — сюда кладется все ЧТО нужно выполнить (различные вычисления бизнес логики), включая показ Wait window
Показ Wait window не должен вызываться из DoWork
AH>Есть решение для такой тривиальной задачи?
Вынести создание и инициализацю окна из потока.
... << RSDN@Home 1.2.0 alpha 5 (M6) rev. 1511>>