[英]Change data in Class when List<sub-class> data is changed
我有一个STimer类,其中有一个List。 serviceDetail经常在计时器上监视,并且很少更改,但是当它更改时,我想得到这样一个事实,即由于处理能力的原因,数据已更改而没有遍历列表。 也许这是一个重复的问题,我只是不知道如何搜索,但是我一直在尝试。 这是一个代码示例:
class STimers
{
public class ServiceDetail
{
private int _serviceKey;
private bool _isRunning = true;
private bool _runningStateChanged = false;
public bool isRunning
{
get { return _isRunning; }
set
{
//Check to see if the data is the same, if so, don't change, if not, change and flag as changed
if(_isRunning = value) { return; }
else
{
_isRunning = value;
_runningStateChanged = true;
<-- Update STimers._dataChanged to true -->
}
}
}
}
public List<ServiceDetail> _serviceMonitors = new List<ServiceDetail>();
public bool _dataChanged = false;
}
我可以在列表上执行.Find来返回所有_serviceMonitors._runningStateChanged = true,但是每次计时器触发时,解析列表的工作量似乎很大,而实际上每1,000个循环中只有1个会发生变化。
这是否有可能,还是我需要将更改检查移出课堂?
您可以通过在ServiceDetail类中添加一个事件来获取此信息
public class ServiceDetail
{
public event EventHandler<ListChangedEventArgs> ListChanged;
private int _serviceKey;
private bool _isRunning = true;
private bool _runningStateChanged = false;
private void OnListChanged(ListChangedEventArgs e){
if (ListChanged != null) ListChanged(this, e);
}
public bool isRunning
{
get { return _isRunning; }
set
{
//Check to see if the data is the same, if so, don't change, if not, change and flag as changed
if(_isRunning = value) { return; }
else
{
_isRunning = value;
_runningStateChanged = true;
OnListChanged(new ListChangedEventArgs(this));
<-- Update STimers._dataChanged to true -->
}
}
}
}
并像这样定义您的ListChangedEventArgs类
public class ListChangedEventArgs:EventArgs
{
public ServiceDetail serviceDetail { get; set; }
public ListChangedEventArgs(ServiceDetail s)
{
serviceDetail = s;
}
}
然后为添加到列表中的每个服务详细信息注册事件
s.ListChanged += (sender, args) => YourFunction();
希望能帮助到你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.