使弹出等待再次显示
本文关键字:显示 等待 | 更新日期: 2023-09-27 18:13:56
我有一个弹出在我的应用程序显示消息。有时,两条信息一个接一个地显示得太快,第二条信息覆盖了第一条信息,使它消失得太快。
所以我想要的是下一条消息等待前一条消息关闭。我使用DispatcherTimer
和MouseEvent来关闭弹出窗口:
popupTimer.Interval = TimeSpan.FromSeconds(5d);
popupTimer.Tick += (sender, args) =>
{
popupMessage.IsOpen = false;
popupTimer.Stop();
};
popupMessage.MouseDown += (sender, args) =>
{
popupMessage.IsOpen = false;
popupTimer.Stop();
};
显示消息的方式如下:
popupMessage.Dispatcher.Invoke(
() =>
{
popupMessage.IsOpen = true;
popupTimer.Start();
});
现在如果我将下面的循环放入show delegate
while(popupMessage.IsOpen) {}
应用程序只是挂在里面,而IsOpen永远不会变回False,即使在等待5秒计时器用完之后。除此之外,我不喜欢使用像这样的阻塞while-loop。
有没有办法让我的消息互相等待?我尝试使用一个简单的bool而不是PopupMessage的IsOpen,但无济于事。
快速破解:
while(popupMessage.IsOpen)
{
System.Threading.Thread.Sleep(0);
}
最好的方法可能是从队列中提取消息
Queue<...> messages = new Queue<...>();
...
popupTimer.Tick += (sender, args) =>
{
if (messages.Count > 0)
{
... = messages.Dequeue();
}
else
{
popupMessage.IsOpen = false;
popupTimer.Stop();
}
};
并在打开消息时将它们排队。
if (popupMessage.IsOpen) {
messages.Enqueue(...);
}