我正在尝试使我的应用程序线程安全。我举起双手承认我是线程新手,所以不知道该怎么做。
为了提供简化版本,我的应用程序包含一个列表。
- 大多数应用程序访问此列表并且不会更改它,但可能会通过它进行枚举。所有这些都发生在 UI 线程上。
- 线程一将定期查找要从列表中添加和删除的项目。
- 线程二将枚举列表并使用额外信息更新项目。这必须与线程一同时运行,因为可能需要几秒钟到几小时的时间。
第一个问题是是否有人对此有推荐的策略。
其次,我试图制作主应用程序将使用的列表的单独副本,在更新/添加或删除某些内容时定期获取新副本,但这似乎不起作用。
我有我的清单和一份副本......
public class MDGlobalObjects
{
public List<T> mainList= new List<T>();
public List<T> copyList
{
get
{
return new List<T>(mainList);
}
}
}
如果我得到 copyList,修改它,保存 mainlist,重新启动我的应用程序,加载 mainlist 并再次查看 copylist,那么更改就存在了。我认为我做错了什么,因为 copylist 似乎仍然指的是 mainlist。
我不确定它是否有所作为,但所有内容都通过类的静态实例访问。
public static MDGlobalObjects CacheObjects = new MDGlobalObjects();