c# - 如何在父表单关闭时显示状态对话框

标签 c# wpf event-handling

我有一个 WPF 应用程序需要一段时间才能关闭,所以我想添加一个“请稍候”对话框,以便在主窗体关闭时显示。但是,当我将“formmessage.show”添加到我的主窗体的关闭事件处理程序时,该窗体显示但不是“请稍候”文本,我得到的只是一个白色矩形。这似乎只有在从关闭处理程序调用此代码时才会发生。它在其他处理程序中运行良好(单击表单或最大化)。谁能帮忙?这是我的简化代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        Form1 f = new Form1();
        f.Show();
        System.Threading.Thread.Sleep(3000);
    }
}

Form1 上有一个标签,上面写着“请稍候”。

最佳答案

试用:

Application.Current.Dispatcher.Invoke(
    DispatcherPriority.Normal, 
    new Action(() =>
                {
                    Form1 f = new Form1();
                    f.Show();
                    System.Threading.Thread.Sleep(3000);
                }));

顺便说一句,您可以删除 Thread.Sleep() 因为 Application Shutdown mode 的默认值是OnLastWindowClose因此应用程序将处于事件状态,直到用户明确关闭事件窗口,可以通过在 App.xaml 中将 Application.ShutdownMode 切换为 OnMainWindowClose 来更改此行为> 文件)

关于c# - 如何在父表单关闭时显示状态对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7548946/

相关文章:

C# 流式套接字,如何分离消息?

c# - 使多边形资源独一无二

wpf - 如何使用可忽略的 ="d"

haskell - 在 Haskell 中处理事件

c# - 处理 OnPropertyChanged

c# - 如何使用 C# 将表传递给 lua

c# - DeviceIoControl 初始化并创建 NTFS 分区

c# - Linq查询将一个表行连接到另一个表多行

c# - 从 ContextMenu 绑定(bind)到父 DataContext

javascript - 如何在未完成的情况下从 ajax 触发的 PHP 调用获取更新?