实例C#之间的对象属性更新

时间:2016-08-10 09:19:49

标签: c# async-await mvvm-light

我在WPF应用程序中有4个服务类实例,当其中一个复杂属性发生更改时,所有4个实例都会更新,同样的更改将应用​​于所有实例。 该课程如下:

public class ExampleClass
{
    private IEnumerable<SomeComplexType> _status;
    public int InstanceNumber { get; set; }

    public IEnumerable<SomeComplexType> Status
    {
        get { return _status; }
        set { _status = value; }
    }

    public Task DoSomeWork()
    {
        var t = Task.Run(() =>
        {
            var random = new Random();
            int i = 1;
            foreach (var item in Status)
            {
                item.SomeValue = random.NextDouble();
                item.ItemNumber = (InstanceNumber*i);
                i++;
            }
            UpdateInterface();
        });
        return t;
    }

    public void UpdateInterface()
    {
        var message = new UpdateMessage {InstanceNumber = InstanceNumber, Status = Status};
        Messenger.Default.Send(message);
    }
}

支持类型与以下类似:

    class SomeComplexType
{
    public double SomeValue { get; set; }
    public int ItemNumber { get; set; }
}

class  UpdateMessage
{
    public int InstanceNumber { get; set; }
    public IEnumerable<SomeComplexType> Status { get; set; }
}

现在,当在实例1上调用 DoSomeWork()方法时,它按预期工作。 然后在实例2上调用 DoSomeWork()方法时相同,但在实例2更新后,实例1上的 UpdateInterface()函数返回实例2的状态值,即使返回了正确的实例编号。

任何人都可以解释这种行为吗?

调用代码是按下按钮触发的简单功能:

public ICommand OnTestClickCommand
{
    get { return _onTestClickCommand ?? (_onTestClickCommand = new RelayCommand(ButtonTestClick); }
}

private async void ButtonTestClick()
{
    await ExampleClass.DoSomeWork;
}

编辑: 问题在于每个班级的人员,看起来像这样:

    public ExampleClass(SomeDefaultClass default)
    {
        Status = default.Status;
    }

创建每个实例时传入了相同的默认变量。原来应该包括那个问题。这仅通过评论中所述的参考。

0 个答案:

没有答案