Я пытаюсь обновить методы, ранее использовавшиеся на основе BackgroundWorker, для использования асинхронных вызовов из библиотеки Microsoft.Bcl.Async. Проблема, с которой я столкнулась, - это индикатор занятости, который больше не работает с новой асинхронной функциональностью (для которой я новичок). Индикатор занятости не отображается, графический интерфейс зависает во время выполнения операции, а затем размораживается, когда он завершен. Я не уверен, что я делаю неправильно ...BusyIndicator, не отображающий метод async
XAML Код:
<Border BorderBrush="Black" BorderThickness="1" CornerRadius="5,5,15,15" Background="#FFA8A9AC" Grid.Column="1" Grid.Row="1">
<Grid x:Name="UIGrid">
<toolkit:BusyIndicator x:Name="BusyIndicator" IsBusy="{Binding Instance.IsBusy}" BusyContent="{Binding Instance.BusyMessage, TargetNullValue='Please wait...'}" >
<Grid x:Name="ScreenGrid" />
</toolkit:BusyIndicator>
</Grid>
</Border>
Код
// Button click handler.
private async void NewReportClick(object sender, RoutedEventArgs e)
{
SystemLog.Trace(this);
await this.CreateReport();
}
// Async implementation.
private async Task CreateReport()
{
SystemLog.Trace(this);
await this.CloseReport();
BusinessLogic.Instance.BusyMessage = "CREATING new report...";
BusinessLogic.Instance.IsBusy = true;
await BusinessLogic.Instance.ReportManager.CreateReport();
BusinessLogic.Instance.IsBusy = false;
BusinessLogic.Instance.BusyMessage = null;
}
Edit: Чтобы ответить на @ Джон тарелочкам, здесь важно Части CreateReport:
public async Task CreateReport()
{
SystemLog.Trace(this);
var internalReportId = GenerateReportId();
var rpt = await ReportFactory.Create();
rpt.InternalReportId = internalReportId;
rpt.EnableNotifications = true;
ReportRepository = new ReportRepository();
await SaveReport(rpt);
// Set the active report.
BusinessLogic.Instance.ActiveReport = rpt;
await AssignReportNumber(MediViewData.Instance.ActiveReport);
}
public async static Task<Report> Create()
{
var rpt = new Report();
/** Set several fields to default values. */
return rpt;
}
Что делает 'ReportManager.CreateReport'? Если это просто выполняется синхронно, то это не поможет вам ... –
Я добавил некоторый код, чтобы надеяться, прояснить, что он делает. Что-то выделяется как неправильное? – dythim
Ну, какой бит на самом деле требует времени? Это 'SaveReport'? На что это похоже? В принципе, я подозреваю, что вы фактически выполняете большую часть работы с синхронными вызовами. –