我想在我写的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
的调用窗口,因此它将被阻止是没有问题的)。我发现使用异步/等待的所有示例都使用某种" Button_Click
"方案,在该方案还可以(和打算)Button_Click
在完成任务之前返回。
换句话说:我想摆脱async void ConnectToServer(...)
中的" async
"。ConnectToServer
不得从呼叫者的角度不同步。
我正在寻找的是某种" Task.WaitAndKeepTheUIThreadRunningSoThatTheProgressBarAnimates()
"
将表演的呼吁放在自己的任务中:
Task.Run(async () => await bo.Performan
...etc.