Вариантов великое множество. Вот простенький пример аля MVVM.
private bool _isBusy;
// свойство для индикации
public bool IsBusy
{
get { return _isBusy; }
set
{
_isBusy = value;
RaiseNotifyPropertyChanged("IsBusy"); // реализация интерфейса INotifyPropertyChanged
}
}
public async Task ButtonClickFunc()
{
IsBusy = true; // запускаем индикацию
await Task.Delay(TimeSpan.FromSeconds(5000));
IsBusy = false; // выключаем индикацию.
}
<!-- XAML code -->
<control:BusyIndicator IsIndeterminate="{Binding IsBusy"} />
Если много, где нужно будет выставлять IsBusy, то лучше сделать подписку на какой-нибудь IObservable и по наступлению события уже выставлять, вместо того, чтобы делать это вручную в каждой функции.