c# - WPF 在运行冗长的操作时显示不确定的进度
问题描述
我想在BackgroundOperationWindow
我编写的一个小 WPF 窗口中显示一个不确定的进度条。这是一个带有无限进度条的简单窗口,但没有“取消”按钮,因为没有什么可以取消的。
它包含这个方法:
public async Task PerformAction( Action action )
{
await Task.Run( () => action() );
}
并用于显示与服务器的连接正在进行中:
async void ConnectToServer( object sender, RoutedEventArgs e )
{
var bo = new BackgroundOperationWindow();
bo.Show();
await bo.PerformAction( () =>
{
// This takes some time...
Server.Connect(...)
} );
}
我的问题是:“ConnectToServer”在连接建立之前不会返回。(由于此时的调用窗口ConnectToServer
尚不可见,所以被阻塞是没有问题的)。我发现使用 async/await 的所有示例都使用某种“ ”场景,在任务完成之前返回是Button_Click
可以的(并且是有意的) 。Button_Click
换句话说:我想摆脱async
. 从调用者的角度来看,不应异步执行。async void ConnectToServer(...)
ConnectToServer
我正在寻找的是某种“ Task.WaitAndKeepTheUIThreadRunningSoThatTheProgressBarAnimates()
”
解决方案
将对 PerformAction 的调用放在它自己的任务中:
Task.Run(async () => await bo.Performan
...etc.
推荐阅读
- r - 正则表达式模式在 grepl 而不是在 dir 中工作
- reactjs - 用户单击标记时如何弹出信息窗口?
- python - 将所有项目从 QListWidget 复制到另一个
- laravel - 获取品牌名称,而不是 ID - Laravel 5.8
- oracle - 在 Oracle 9 中更新 CLOB 列中的大文本
- vagrant - 如何从错误点恢复 Vagrant shell 配置程序?
- java - AWS CDK:有没有办法使用 CDK 创建数据库模式?
- powerbi - Multiple measures using the same filter
- r - 有没有办法在 r 的主 x 轴下方添加一个 x 轴?
- iis - How to set IIS url rewrite for http header