我这样做过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/