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的调用窗口,因此它将被阻止是没有问题的)。我发现使用异步/等待的所有示例都使用某种" Button_Click"方案,在该方案还可以(和打算)Button_Click在完成任务之前返回。

换句话说:我想摆脱async void ConnectToServer(...)中的" async"。ConnectToServer不得从呼叫者的角度不同步。

我正在寻找的是某种" Task.WaitAndKeepTheUIThreadRunningSoThatTheProgressBarAnimates()"

将表演的呼吁放在自己的任务中:

Task.Run(async () => await bo.Performan
    ...etc.

最新更新