在我的申请中,我按照下面显示的方式覆盖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);
}
答案 0 :(得分:1)
我尝试过使用中止线程,而且我很惊讶它不起作用。
而且我可以说它看起来并不容易......
所以我建议调查一下:click me
这是一个关于如何创建自己的消息框的好教程,这也可以帮助您解决删除确定按钮的问题。
干杯。