我的程序的主要组件在主线程中运行。该程序能够将用户的工作保存到文件中,但是额外的元信息会与用户的工作一起保存。
例子:
[Serializable]
public Class UserWork
{
// Lots of things in here. Lots of work user has done, etc...
}
在程序中,我存储了一些东西,比如设置等。让我们假设它们是bool flag1
and bool flag2
。我有这样的结构:
[Serializable]
public class SavedFile
{
UserWork userWork;
bool flag1;
bool flag2;
}
当我保存时:
saveData(new SavedFile(userWork, flag1, flag2));
当我加载:
SavedFile savedFile = SavedFile.Load(path);
UserWork userWork = savedFile.userWork;
bool flag1 = savedFile.flag1;
bool flag2 = savedFile.flag2;
所以基本上flag1和flag2需要和作品一起保存,但不一定属于作品。它们实际上代表了用户在保存时完成工作流的程度。
现在,我构建了一个自动保存功能,它可以监控用户进行任何修改时触发的事件。UserWork 类触发事件,所以这很容易做到。我遇到的问题是我不确定如何发送和存储对 AutoSave 线程中标志的引用。
我有:
public class AutoSave // (This code runs in a separate thread)
{
bool flag1;
bool flag2;
UserWork userWork;
public AutoSave(UserWork userWork, ref bool flag1, ref bool flag2)
{
this.flag1 = flag1;
this.flag2 = flag2;
this.userWork = userWork;
userWork.workUpdated += new WorkUpdatedHandler(save);
}
void save(object sender, WorkUpdateArgs e)
{
saveDate(new SavedFile(userWork, flag1, flag2));
}
}
当我运行我的代码(不是上面的代码,而是类似的代码)时,这些标志总是false
不管它们在我的主线程中的值是什么。
编辑澄清:问题不在于我不能让它与其他解决方法一起使用。例如,我可以在 AutoSave 类中公开两个标志并同时更新主标志和自动保存标志。即flag1 = autoSave.Flag1 = true
。相反,问题在于这很麻烦。这意味着我必须记住每次更新任何标志时都这样做。此外,当我可以简单地在内存中保存一份副本并在多个地方引用它时,一直用相同的数据更新多个变量是没有意义的。