应用程序关闭时显示通知(例如消息框)

时间:2014-05-22 19:10:01

标签: c# wpf

在我的申请中,我按照下面显示的方式覆盖OnClose事件。由于应用程序可能需要一些时间才能执行SynchronizeLotsaStuff,因此我想通知用户应用程序即将关闭。

我尝试使用MessageBox,但是阻止了程序的继续,并且还显示了一个不需要的“确定”按钮。

我想我更喜欢更具特色的东西,例如淡化/变灰窗口,甚至是关闭的“闪屏”,但是常规的消息框也可以。

// MainWindow.xaml.cs:

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    MessageBox.Show("Wait while application is closed...");
    if (this.DataContext != null) {
        var vm = this.DataContext as ShellViewModel;
        // possibly long-running method
        vm.SynchronizeLotsaStuff();
    }
    base.OnClosing(e);
}

更新:遵循Stijn Bernards的建议,我把MessageBox的东西放在一个线程中,但是我没有找到(是的,我用googled)一种正确的方法来终止它。即使Abort,在MainWindow关闭后,MessageBox仍会继续显示,直到我点击“确定”按钮。

// MainWindow.xaml.cs:

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    var messagethread = new Thread(new ThreadStart(() => {
        MessageBox.Show("Aguarde enquanto o aplicativo é encerrado...");
    }));

    messagethread.Start();

    if (this.DataContext != null) {
        var vm = this.DataContext as ShellViewModel;
        // possibly long-running method
        vm.SynchronizeLotsaStuff();
    }

    // UGLY UGLY UGLY (and doesn't work either)
    messagethread.Abort();

    base.OnClosing(e);
}

1 个答案:

答案 0 :(得分:1)

我尝试过使用中止线程,而且我很惊讶它不起作用。

而且我可以说它看起来并不容易......

所以我建议调查一下:click me

这是一个关于如何创建自己的消息框的好教程,这也可以帮助您解决删除确定按钮的问题。

干杯。