从任务中的对象设置属性值

本文关键字:设置 属性 对象 任务 | 更新日期: 2023-09-27 18:31:51

我有一个名为 Settings 的对象。它有一个名为 BusyDoingAction 的属性,类型为 bool

public class Settings : ObservableObject
    {
        private bool busyDoingAction;
        public bool BusyDoingAction 
        {
            get { return this.busyDoingAction; }
            set
            {
                this.busyDoingAction= value;
                OnPropertyChanged(() => BusyDoingAction);
            }
        }

我还有另一个类叫 FileAdding,

private readonly string[] files;
private bool busy;
public FileAdding(string[] files, bool busyAction)
        {
            this.files = files;
            this.busy= busyAction;
        }

现在,在我的视图模型中,我有以下内容:

var fileAdding = new FileAdding(files, Settings.BusyDoingAction);            
            if (!fileAdding.Initialize())
                return;
            Task<bool>.Factory.StartNew(() =>
            {
                fileAdding.Execute(CToken);
                return fileAdding.Deinitialize();
            }, CToken);
        }

在文件添加初始化()函数中,我有:

public bool Initialize()
        {
           busy  = true;
           return true;
        }
public bool Deinitialize()
         {
           busy  = false;
           return true;
         }

问题是:忙碌操作在文件添加中没有更改,并且我没有收到该属性的任何值更改通知..

该属性绑定到我的应用程序中的主网格,我使用它来检测应用程序是否繁忙并根据 BusyDoing Action 的值启用/禁用网格

我不知道我做错了什么,但我需要在那个 busyDoingAction.Intialize/Deinitialize 函数中设置 BusyDoingAction 的属性值。

任何帮助真的很感激..

从任务中的对象设置属性值

FileAdding类应该喜欢这个..你应该有Settings属性...并在 UI 上绑定到Settings.BusyDoingAction

    private readonly string[] files;
    private Settings setting;
    public FileAdding(string[] files, Settings setting)
            {
                this.files = files;
                this.setting= setting;
            }
public Settings Settings
        {
            get { return this.setting; }
            set
            {
                this.setting= value;
                OnPropertyChanged(() => Settings);
            }
        }
public bool Initialize()
        {
           Settings.BusyDoingAction = true;
           return true;
        }
public bool Deinitialize()
         {
           Settings.BusyDoingAction = false;
           return true;
         }

正在执行:

var fileAdding = new FileAdding(files, Settings.BusyDoingAction);

您只需将当前值或Settings.BusyDoingAction复制到 FileAction.busy .

Settings.BusyDoingActionFileAdding.busy之间没有联系

为了解决您的问题,一种方法是将Settings引用传递给FileAdding

private readonly string[] files;
private readonly Settings settings;
public FileAdding(string[] files, Settings settings)
{
    this.files = files;
    this.settings = settings;
}

然后在:

public bool Initialize()
{
   this.settings.BusyDoingAction = true;
   return true;
}
public bool Deinitialize()
{
   this.settings.BusyDoingAction = false;
   return true;
}