c# - WPF 在后台工作完成后自动关闭对话框
问题描述
当我单击登录按钮时,我的后台工作人员开始处理并显示一个加载对话框窗口。
但是,我的任务完成后如何关闭它?
private void LoginButton_Click(object sender, RoutedEventArgs e)
{
AdjustControls(false);
if (Username == null)
{
Error("Username required");
return;
}
loading.ShowDialog();
backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += login_backgroundWorker_DoWork;
backgroundWorker.ProgressChanged += login_backgroundWorker_ProgressChanged;
backgroundWorker.RunWorkerCompleted += login_backgroundWorker_RunWorkerCompleted;
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.RunWorkerAsync();
}
private void login_backgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
var backgroundWorker = sender as BackgroundWorker;
try
{
this.Dispatcher.Invoke(new MethodInvoker(delegate ()
{
loading.ShowDialog();
Action closeAction = () => loading.Close();
loading.Dispatcher.Invoke(closeAction);
this.Close();
}));
}
catch (Exception InputChangedException)
{
Console.WriteLine(InputChangedException);
if (InputChangedException != null)
{
Error(InputChangedException.Message);
}
}
}
private void login_backgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
}
private void login_backgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
this.Dispatcher.Invoke(new MethodInvoker(delegate ()
{
loading.Close();
}));
}
解决方案
我找到了答案,看起来很简单。我只需要设置一个动作:
this.Dispatcher.BeginInvoke(new Action(() => loading.ShowDialog()));
这是启动它,然后是另一个时间关闭它
推荐阅读
- sql - 在查询结果中只出现一次的行
- angular-material - 角反应形式 - 如何设置选择/下拉控件的默认值?
- ios - Git 说当我向项目中添加新文件时,我删除了 .pbxproj 文件中的一行
- c++ - stl 结构列表作为类成员
- python - 远程图像上传执行与开发服务器不同
- azure - 启动 Cosmos DB 模拟器时出错
- sql - SQL将多行合并为一列并从ID中获取名称
- poco - POCO 许可证已过期
- twilio - Twilio 可编程聊天 sendMessage 返回值
- php - Laravel Eloquent getting related content with multiple columns