Wie erstelle und verwende ich eine abstrakte Klasse für asynchrone Befehle?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie erstelle und verwende ich eine abstrakte Klasse für asynchrone Befehle?

Post by Guest »

Ich entwickle etwas mit wpf mvvm.
Derzeit ist mein Implementierungsstil etwas ungewöhnlich.
Dies dient dazu, die Soße zu verhindern An einem Ort versammeln.
Async void sollte vermieden werden, aber ich weiß nicht, wie ich es vermeiden kann.
Irgendeine Lösung?
Unten ist die Quelle aufgeführt, die ich verwendet habe. (RelayCommand ist generisch und ich muss einen neuen asynchronen Befehl erstellen.)
,

Code: Select all

[*]



this.DataContext = new ViewModel();

Code: Select all

public ViewModel() { }

private isBusy;
public isBusy
{
get => isBusy;
set => SetField(ref isBusy, value);
}

public ObservableCollection Models { get; set; }

public ICommand OnClickButtonCommand { get => new ButtonCommand(this); }

Code: Select all

public ButtonCommand : RelayCommand
{
private ViewModel viewModel;
public ViewModel(ViewModel viewModel)
{
this.viewModel = viewModel
}

public override async void Execute(object obj)
{
viewModel.IsBusy = true;
await Task.Delay(1500);

viewModel.Models = new ObservableCollection(await Data());
viewModel.IsBusy = false;
}

private async Task Data()
{
await Task.Delay(100);
var data = new List();
...
return data;
}
}

*Das Einfügen einer Warteverzögerung dient dazu, eine Debugging-Warnung zu verhindern.

Code: Select all

public interface IRelayCommand : ICommand
{
new void Execute(object obj);
}

public abstract class RelayCommand : IRelayCommand
{
public RelayCommand() { }

public event EventHandler CanExecuteChanged
{
add    => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}

bool ICommand.CanExecute(object obj)
{
if (obj?.ToString().Length == 0)
{
return false;
}
else
{
return true;
}
//return canExecute == null || this.canExecute.Invoke(parameter);
}
public abstract void Execute(object obj);
}
Und wenn mein Code seltsam ist oder es besseren Code gibt, lassen Sie es mich bitte wissen!
Danke. :)

https://johnthiriet.com/mvvm-going-asyn ... c-command/

Ich habe viel von dieser Site und anderen Beispielen gesehen, aber es ist ein Beispiel mit einer typischen Funktion,
also kann ich es nicht anwenden. ..

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post