c#のWindowsアプリケーションで独自のイベントシステムを作成したいと思います。これを行うために、私は次のクラスを書きます:
internal class EventManager
{
private static List<EventRecord> s_listEvents = new List<EventRecord>();
public static void AddEvent(EventRecord record)
{
record.EventDate = DateTime.Now;
s_listEvents.Add(record);
}
public static List<EventRecord> GetRecordsByDate(DateTime date)
{
var r = (from l in s_listEvents
where l.EventDate >= date
select l).ToList<EventRecord>();
return r;
}
}
EventManagerクラスがスレッドセーフであることを確認したいと思います。アプリケーションで同時に数百のスレッドを作成するためです。ほとんどの場合、すべてのスレッドがこのクラスを使用してイベントを生成します。また、関数が別のスレッドから呼び出されるGetRecordsByDate
ときに、クラスの外部から関数が呼び出される場合があります。
簡単に言うと、この設計はマルチスレッドウィンドウアプリケーションに適していると言えますか?これがスレッドセーフでない場合、クラスまたはそのメンバーをスレッドセーフにするにはどうすればよいですか?同期オブジェクトを使用してクラス全体をロックする必要がありますか、それともreadwritelockerを使用して静的メンバーをロックする必要がありますか?AddEvent
EventManager
s_listEvents