2011-03-24 224 views
1

我尽量拖延我App.xaml.ca关闭窗口:如何延迟窗口关闭在WPF

Window splash = new Window(); 
splash.Show(); 

Timer timer = new Timer(callback, null, 2000, Timeout.Infinite); 

private void callback(object stateInfo) 
{ 
    splash.Close(); 
} 

它工作正常,但整个应用程序的shutdowning。这里做错了什么?

+1

为什么你想要一个应用程序来关闭前暂停?这违背了Windows中的预期行为,这意味着这是一个糟糕的设计。它也会让人觉得你的计划是滞后的。如果您正在考虑添加一个关闭确认对话框,请参阅Joel Spolsky的UI设计手册中的本章:http://www.joelonsoftware.com/uibook/chapters/fog0000000062.html(最后,它说“很多人都是受到计算机的威胁) – 2011-03-25 02:05:25

+0

哦,你正在试图实现一个关闭自己的启动画面......你可以编辑你的问题,使其更明显,可能在第一句话中说明? :)它使得更快地弄清楚你在问什么。沿着这些线条,您可能还想让您的应用出现在您的启动画面上。让你的应用程序*启动*慢慢就会让用户感到厌烦。 – 2011-03-25 02:09:21

+0

我将最终编辑它。但是你不能混用Window和App。我试图关闭一个窗口,而不是应用程序。但是当我关闭窗口时,应用程序也关闭了,我不想要。 – 2011-03-25 13:26:39

回答

1

一定要检查你的定时器回调是否回到主调度器线程上。如果不是,那么当您尝试从另一个线程关闭窗口时,您可能会遇到异常。

使用splash.Dispatcher.CheckAccess()确保您处于正确的线程,如果不是,则使用splash.Dispatcher.BeginInvoke((Action)() => splash.Close()将调用分派到主线程。

退房this page更多

+0

调度工作完美。谢谢。 – 2011-03-25 13:42:08

0

有不同的关闭模式,如果该窗口关闭并且它是最后一次,那么应用程序将默认关闭。所以你可以看到还有一些窗口,或者你可以通过设置ShutdownMode来满足你的需求来改变关机行为。

例如

Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown; 
+0

不错的答案,但它是明智的离开它,而不是改变它。只是实例化你的主菜单窗口,显示它并隐藏飞溅:) – Machinarius 2011-03-24 21:43:18