WPF非阻塞自动关闭消息框

3

我需要实现一个非阻塞的MessageBox,它会在20秒后自动关闭。请问有人能建议我怎样做吗?

2个回答

9

使用DispatcherTimer创建一个新的窗口。当窗口打开时,启动计时器。然后您有两个选择:

  • (简单:)将计时器设置为20秒,并在计时器到期时关闭窗口。
  • (优美:)将计时器设置为1秒,并在每次计时器到期时递减某个计数器(从20开始)。您在窗口中显示该计数器并在计数器达到0时关闭窗口。

6

当你说非阻塞时,我立刻排除了MessageBox类(假设你所说的非阻塞是指非模态对话框?)。

相反,您可以创建一个窗口,该窗口是MessageBox的自己实现。要使其非模态,您调用Show()方法。然后,您只需设置一个20秒的计时器来调用关闭方法:

DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();

//Constructor
public MyMessageBox()
{
    timer.Interval = TimeSpan.FromSeconds(20d);
    timer.Tick += new EventHandler(timer_Tick);
}

public new void Show()
{
    base.Show();
    timer.Start();
}

void timer_Tick(object sender, EventArgs e)
{
    //set default result if necessary

    timer.Stop();
    this.Close();
}

以上假定您已创建一个名为MyMessageBox的类,该类继承自Window。


糟糕,看起来 Heinzi 比我更快地完成了。 - xr280xr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接