WPF非阻塞,自动关闭消息框

时间:2011-04-05 12:43:14

标签: c# wpf

我需要实现一个在20秒后自动关闭的非阻塞MessageBox。有人可以建议我怎么做这个吗?

2 个答案:

答案 0 :(得分:9)

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

  • (简单:)您可以将计时器设置为20秒,并在计时器到期时关闭窗口。
  • (很好:)每次定时器到期时,您都会将定时器设置为1秒并减少一些计数器(从20开始)。您在窗口中显示计数器,并在计数器达到0时关闭窗口。

答案 1 :(得分:6)

当你说非阻塞时我会立即排除MessageBox类(假设非阻塞你是指一个非模态对话框?)。

您可以改为创建一个Window,它是您自己的MessageBox实现。要使其成为非模态,请调用Show()方法。然后你可以设置一个20秒的计时器来调用close方法:

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();
}

//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。