我想在我编写的类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()
”
答案 0 :(得分:0)
将对PerformAction的调用放在自己的任务中:
Task.Run(async () => await bo.Performan
...etc.