Я пишу класс для регистрации событий. Мой LogClass реализован как одноэлементный, и любой класс в системе может записать запись в журнал. Записи хранятся в списке, а когда буфер заполняется, они выгружаются на диск.
Я использую DataGridView для отображения содержимого LogClass во время выполнения, поэтому я использовал BindingList, чтобы средство просмотра обновлялось автоматически.
Мне интересно, насколько безопасен мой класс.
Я использую «блокировку» каждый раз, когда добавляю новую запись в список, и когда я перебираю список, чтобы записать ее на диск.
Помимо DataGridView, класс в основном только для записи, потому что нет опции для чтения из журнала, только для добавления записей в журнал.
Дамп выполняется внутренне, и это единственный раз, когда в BindingList есть явная команда чтения.
Итак, меня действительно беспокоит то, что происходит с DataGridView и BindingList?
BindingList генерирует событие при каждом изменении списка.
Это не похоже на проблему при добавлении новых записей, потому что событие выбрасывается, когда добавление завершено.
Мой код для Dump ():
lock (lockObj) {
foreach (LogEntry le in List) {
writeToDisk(le)
removeFromList(le)
}
}
Несмотря на то, что я блокирую список на протяжении всей итерации, в Viewer выдается событие, которое изменило список (из-за удаления) и, следовательно, читается DataGridView. Я действительно не хочу ничего читать / писать в список, пока я его изменяю.
Есть идеи?