При попытке выполнить долгий вызов проекта WPF MVVM интерфейс блокируется во время вызова. Я не могу понять, почему ...
Вот пример:
public class UIViewModel : ViewModelBaseClass
{
...
public ICommand Bt_Search { get; set; }
public UIViewModel
{
Bt_Search = new RelayCommand(o => Load());
}
...
...
private async Task Load()
{
await Task.Run(() => Thread.Sleep(20000)); //just simulate a long call
}
...
}
Вот мой класс RelayCommmand:
public class RelayCommand : ICommand
{
private Action<object> _action;
public RelayCommand(Action<object> action)
{
_action = action;
}
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
_action(parameter);
}
public event EventHandler CanExecuteChanged;
}
А вот мой ViewModelBaseClass:
public abstract class ViewModelBaseClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected virtual bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = "")
{
if (EqualityComparer<T>.Default.Equals(storage, value))
return false;
storage = value;
this.OnPropertyChanged(propertyName);
return true;
}
}
При использовании asyn c Task на MVVM не следует ли оставлять поток пользовательского интерфейса свободным? Но кажется, что поток блокируется, даже когда я использую ConfigAwait (false).
Любая помощь приветствуется.