Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

Создание временного окна (Окно уведомлений)

#c_sharp #wpf #xaml


Необходимо создать такое окно, которое откроется, отобразиться пару секунд и само
закроется. 
По сути это окно будет выполнять роль уведомления. 
Произошло событие - всплыло уведомление, отобразилось на пару секунд и скрылось. 
Текст в уведомлении каждый раз разный. 
Передавать буду как аргумент конструктора, либо через DataContext.

AlarmWindow alarm = new AlarmWindow(alarmMessage);
alarm.Show();
//либо
AlarmWindow alarm = new AlarmWindow()
{
    DataContext = alarmMessage
};
alarm.Show();

    


Ответы

Ответ 1



Должно работать так: void TickHandler(...) { Application.Current.Dispatcher.InvokeAsync(async () => { AlarmWindow alarm = new AlarmWindow(alarmMessage); alarm.Show(); await Task.Delay(2000); alarm.Close(); }); }

Ответ 2



Добавьте в форму таймер с интервалом задаваемым через конструктор. И по событию таймера закрывайте форму изнутри. partial class AlarmWindow:Form{ public AlarmWindows(string msg, int timeToShow){ ... System.Timers.Timer closeMe = new System.Timers.Timer((double)timeToShow); closeMe.Elapsed += closeMe; closeMe.AutoReset = false; closeMe.Start(); ... } void closeMe(object sender, System.Timers.Timer e){ this.close(); }

Ответ 3



Помог следующий способ: AlarmWindow alarm = new AlarmWindow(alarmMessage); alarm.Show(); System.Threading.Thread.Sleep(2000); // (!) вешает программу на 2 секунды, alarm.Close(); //поэтому в основном потоке использовать крайне не рекомендуется Так делать не стоит!!! Вот >тут< есть более корректный ответ.

Комментариев нет:

Отправить комментарий