Он зависает, потому что вы пытаетесь обновить ProgressBtn, который является элементом управления пользовательского интерфейса из вашего асинхронного метода. Не уверен, что вы вызываете этот метод из фонового потока. Если бы я сделал это, я бы ввел обратный вызов в методе FetchInvoiceDataAsync () для обновления элемента управления ProgressBtn. В этом методе обратного вызова я бы вызвал диспетчер для обновления пользовательского интерфейса. Это должно решить все проблемы с замораживанием.
Application.Current.Dispatcher.Invoke(() =>
{
// Set property or change UI compomponents.
});
Помимо этого, я бы также рекомендовал использовать ListCollectionView вместо наблюдаемой коллекции. Это гарантирует, что вы можете обновить пользовательский интерфейс, вызывая обновление каждый раз, когда у вас есть новые дополнения к списку.
Надеюсь, это поможет!