wpfmodal-dialogfont-awesomespinning

How to show Spinning Modal in WPF


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?


Solution

  • 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());