我正在创建一个可以通过语音使用的议程。此外,还有一个虚拟助手 (VA) 可以提供反馈,并有一些人工智能来获得并保持良好的日常节奏。
情况是我有一个公共静态列表议程。
Agenda 是一个抽象类,目前有 9 种不同的 Agenda 类型。这是程序的数据核心。这包含程序需要知道的所有内容。
主线程包含 GUI 和人们可能期望议程的可用性。
虚拟助手需要做的一切都是在不同的线程中完成。这主要是检查议程并问一些问题,如果人们想在议程中做任何事情。
棘手的部分是当我还想从某些逻辑(可以说是添加人工智能)中将事情添加到议程中时,例如日常用餐。这来自 VA 线程,但我无法从那里更改 Agenda.agenda 并得到一个错误,说该集合已被修改。
我试过锁定它,但没有区别。
将餐点添加到今天:
public void Meal()
{
DateTime date = DateTime.Now;
DateTime morning = date;
morning = morning.ChangeTime(8, 0, 0, 0);
DateTime afternoon = date;
afternoon = afternoon.ChangeTime(12, 0, 0, 0);
DateTime evening = date;
evening = evening.ChangeTime(16, 30, 0, 0);
if (!meal && date.Hour < 21)
{
if(date.DayOfWeek == DayOfWeek.Wednesday)
toAdd.Add(new Task("broodbuffet", morning, new Dictionary<DateTime, bool>()));
else
toAdd.Add(new Task("ontbijt", morning, new Dictionary<DateTime, bool>()));
toAdd.Add(new Task("lunch", afternoon, new Dictionary<DateTime, bool>()));
toAdd.Add(new Task("diner", evening, new Dictionary<DateTime, bool>()));
meal = true;
}
if (date.Hour > 22)
meal = false;
}
在我用我的 VA 做基础知识的课堂上:
ai.Meal();
UpdateAgenda();
在线程中更新的方法:
private void UpdateAgenda()
{
if (ai.GetToAdd().Count != 0)
{
Agenda.agenda.AddRange(ai.GetToAdd());
}
}
并带锁:
private void UpdateAgenda()
{
if (ai.GetToAdd().Count != 0)
{
lock (Agenda.agenda)
{
Agenda.agenda.AddRange(ai.GetToAdd());
}
}
}
简而言之,如何从 VA 线程将议程项目添加到我的议程中?