At first, the Visibility property is not bool , so if you want to bind the bool variable to it, you need to use IValueConverter , and secondly, yes, you are right, while the UI thread busy with your long-running operation will not do anything, including changing the visibility .
I suggest using the WPF Toolkit BusyIndicator waiting for the placement of your own panel, it has the IsBusy bool property.
Also froozen user interface is not user friendly, as a rule, I use this snippet
IsBusy = true; Task.Factory.StartNew(() => { // Do work. }) .ContinueWith(t=>IsBusy=false, TaskScheduler.FromCurrentSynchronizationContext());
Also note to check for errors in the ContinueWith method, or you will get an exception on Task dispose
source share