c# - Window.Show() 不显示控件,但 Window.ShowDialog() 显示控件 2

标签 c# wpf windows xaml

我这样做过Window.Show() doesn't display controls but Window.ShowDialog() does解决问题。但是尽管如此,我还是有同样的问题。我如何修改以下代码来解决此问题?

            TimeWindow aTimeWindow = new TimeWindow();
            BackgroundWorker bw = new BackgroundWorker();
            bw.DoWork += ((o, ea) => { 
                // Highly time consumable task
                _resetEvent.Set();
            });
            aTimeWindow.Show();
            bw.RunWorkerAsync();
            _resetEvent.WaitOne();
            aTimeWindow.Close();

_resetEvent 是类的字段。 TimeWindow 只是一个带有 TextBox WPF 控件的图像。

最佳答案

您可以只使用 async/await,以便在工作完成时显示和关闭窗口。像这样的东西:

private async void ShowWindow()
{
    var aTimeWindow = new TimeWindow();
    aTimeWindow.Show();
    await Task.Run((Action)DoWork);
    aTimeWindow.Close();    
}

private void DoWork()
{
    // perform long running work here
}

编辑:

不使用异步/等待

private void ShowWindow()
{
    var aTimeWindow = new TimeWindow();
    aTimeWindow.Show();

    Task.Run(()=>
    {
        DoWork();
    })
    .ContinueWith((t) =>
    {       
        Application.Current.Dispatcher.BeginInvoke((Action)(() => 
        {
            aTimeWindow.Close();    
        }));
    });
}

private void DoWork()
{
    // perform long running work here
}

关于c# - Window.Show() 不显示控件,但 Window.ShowDialog() 显示控件 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30782460/

相关文章:

c# - 线程在 WPF 应用程序中抛出 System.OutOfMemoryException

c++ - 为 Windows 编写非阻塞标准输入读取函数?

windows - 是什么导致 MS Windows 'System' 进程在编译时出错?

c# - 我如何定义一个类来反序列化二进制文件

c# - 使用用户名和密码从 WPF 应用程序进行 GitHub 身份验证

c# - 获取设置了 WrapText 的单元格的行高

c# - 将 Directx12 资源移植到 XAML 元素:关于 WRL::ComPtr 替换的建议?

windows - 如何使用/安装 GNU binutils (objdump)

c# - 如何从 windows.form 中删除 Cookie?

c# - O(1) 哈希查找?