WPF在长时间运行时显示不确定的进度

时间:2019-03-04 17:33:38

标签: c# .net 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()

1 个答案:

答案 0 :(得分:0)

将对PerformAction的调用放在自己的任务中:

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