我有一个公共属性公开了一个类管理器(ViewManager),它管理哪些视图可供哪些用户使用。该属性(以及其他几个属性)调用名为 PopulateCollections() 的函数,然后返回私有字段 _Views。
private bool _CollectionsPopulated = false;
public ViewManager Views { get { PopulateCollections(); return _Views;}}
void PopulateCollections()
{
if (_CollectionsPopulated) return;
_CollectionsPopulated = true;
foreach (ClassTable item in ClassessTables)
{
item.ReflectMe();
}
}
ClassTable 是另一个在数据库表中存储类结构的类。函数 ReflectMe() 调用每个类项来获取每个类的属性。
所有这些代码都很好用。我的问题是时间问题。
当代码运行时,99% 的时间我都没有问题。但是对于这 1%,函数 PopulateCollections() 花费的时间太长,并且会导致异常。
当通过每个可用模型(每个都有自己的 ClassesTables 组)进行解析时,我到了我正在查看视图的这一点......
If ((ThisModel != null) && (ThisModel.Views != null))
{
//Code here
}
当它到达第一次触发 PopulateCollections 的“ThisModel.Views”时,当我将鼠标悬停在 ThisModel.Views 上时,我得到以下信息:
“‘ThisModel.Views’引发了‘System.InvalidOperationException’类型的异常”
然而,再过一秒钟,当我再次将鼠标悬停在它上面时,我得到了我期望的实际值。这告诉我 PopulateCollections() 代码仍在反映每个类,因为当我在没有调试的情况下运行它时,抛出的异常是
“集合已修改;枚举操作可能无法执行。”
那么......我如何让代码明确等待,直到这个方法完成?