Я гуглял по этому вопросу довольно много часов и прочитал немало ТАК вопросов, где это обсуждается, но мне жаль говорить, что я просто не понимаю, как его использовать.
По сути, чтоЯ пытаюсь сделать так, чтобы ярлык в приложении WPF / Win Forms отображал следующее во время выполнения асинхронной задачи:
Обработка.
и на каждомИнтервал в 1 секунду, чтобы добавить еще одну точку, пока я не достигну трех, а затем начать с 1, пока задача не будет выполнена.
В качестве первого шага я только пытаюсь добавить точку после каждой секунды и пробовал ее сдействие IProgress, но единственное, что мне удалось выполнить, это либо ничего, либо метка заполняется точками за один снимок, а другая задача, кажется, запускается после этого.
Затем я попытался выполнитьследующее:
private async void startButton_Click(object sender, RoutedEventArgs e)
{
resultsTextBox.Text = "Waiting for the response ...";
startButton.IsEnabled = false;
resultsTextBox.Clear();
var task = SumPageSizesAsync();
var progress = Task.Run(() =>
{
var aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
void OnTimedEvent(object source, ElapsedEventArgs et)
{
if (!lblProgress.Dispatcher.CheckAccess())
{
Dispatcher.Invoke(() =>
{
lblProgress.Content += ".";
});
}
}
});
await task;
await progress;
resultsTextBox.Text += "\r\nControl returned to startButton_Click.";
startButton.IsEnabled = true;
}
Но опять же, метка сразу заполняется точками, в то время как другая задача продолжает выполняться.
Я взял этот пример из Документов Microsoft
ОБНОВЛЕНИЕ : Я попытался удалить цикл while (! Task.IsComplete), который в основном заставляет метку начинать обновляться после завершения первой задачи.Затем я попытался сделать следующее:
var task = SumPageSizesAsync();
var progress = GetProgress();
await Task.WhenAll(SumPageSizesAsync(), GetProgress());
Но получил тот же результат, ярлык начинает обновляться после завершения первого задания.
Спасибо за вашу помощь.