Задача блокирует пользовательский интерфейс в проекте MVVM WPF - PullRequest
0 голосов
/ 12 июля 2020

При попытке выполнить долгий вызов проекта 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).

Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...