我在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;
}
创建每个实例时传入了相同的默认变量。原来应该包括那个问题。这仅通过评论中所述的参考。