我有一个WPF项目和一个Console项目,WPF的要点是前端UI,控制台应用程序是执行实际工作的逻辑。
在后端,我有一个带有可完成工作的方法的类。
public static class BackendClass
{
public static void DoWork(ref string output)
{
//actual work
}
}
从MVVM前端,我的视图模型为此方法启动了一个任务,我希望能够在其前端显示状态消息。诸如“开始工作”,“某某事情正在做”,“完成”之类的事情。等。
我的视图模型中的代码是:
class ViewModel : INotifyPropertyChanged
{
static string backendOutput;
public string BackendOutput
{
get => backendOutput;
set
{
if (backendOutput != value)
{
backendOutput = value;
OnPropertyChanged("BackendOutput");
}
}
}
public RelayCommand ExecuteCommand { get; private set; }
Task executionTask;
public event PropertyChangedEventHandler PropertyChanged;
public ViewModel()
{
executionTask = new Task(() => BackendClass.DoWork(ref BackendOutput));
}
void OnExecute()
{
executionTask.Start();
ExecuteCommand.RaiseCanExecuteChanged();
}
bool CanExecute()
{
return (executionTask.Status != TaskStatus.Running &&
executionTask.Status != TaskStatus.WaitingToRun);
}
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
}
}
“ BackendOutput”属性是数据绑定到WPF窗口中的文本块。
我当时正在考虑传递“ BackendOutput”属性,以便“ DoWork”方法可以向其附加状态消息,从而引发更改后的事件,从而更新前端。 但是,如果我尝试在构造函数之外分配它,则会出现错误,即属性不能是字段初始化器或类似的东西,在这种情况下,我会收到“无法将属性作为ref参数传递”的信息。 >
那么我应该如何提醒前端背面正在抽出哪些状态消息?