音声で使える議題を作成中です。さらに、フィードバックを提供し、毎日のリズムを取得して維持するための AI を備えた仮想アシスタント (VA) があります。
状況は、パブリックな静的リストの議題を持っているということです。
Agenda は、現在 9 つの異なる Agenda タイプを持つ抽象クラスです。これはプログラムのデータコアです。これには、プログラムが知る必要があるすべてが含まれています。
メイン スレッドには GUI が含まれており、アジェンダに期待されるユーザビリティが提供されます。
仮想アシスタントが行う必要があることはすべて、別のスレッドで実行されることです。これは主にアジェンダをチェックし、人々がアジェンダで何かをしたい場合は質問をすることです。
難しいのは、毎日の食事など、特定のロジック (いわば AI の追加) から議題に追加したい場合です。これは 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 スレッドから私の議題に議題項目を追加する方法は?