I have an application which contain below code in its MainWindow.xaml to show the spinning modal using FontAwesome icon:
<Grid Visibility="{Binding SpinningModalVisibility}">
<StackPanel>
<fa:ImageAwesome Icon="Spinner" Spin="True" SpinDuration="5"/>
</StackPanel>
</Grid>
and in ViewModel, I will call
SpinningModalVisibility = Visibility.Visible;
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, (Action)(() =>
{
//MyAction
}));
SpinningModalVisibility = Visibility.Hidden;
but for some reason, my icon is not spinning, and the modal does not behave correctly; sometime it show, sometime does not. Did I do something wrong here?
You should perform the action on a background thread. The UI thread cannot both display the spinner and run your code at the same time:
SpinningModalVisibility = Visibility.Visible;
Task.Factory.StartNew(()=>
{
//YourAction();
}).ContinueWith(Task =>
{
SpinningModalVisibility = Visibility.Hidden;
}, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());