Я использую шаблон синглтона в приложении wpf, но сомневаюсь, как заставить его работать с несколькими потоками.
У меня есть класс Monitor, который поддерживает список «настроек» для просмотра для разных «устройств». Схема показана ниже.
В своей основной теме я делаю
Monitor.getMonitor.register (список наблюдения) или Monitor.getMonitor.unregister (...) в зависимости от ввода пользователя, и каждые 200 мс выполняется DispatchTimer, который выполняет
Monitor.getMonitor.update ()
public class Monitor
{
private Hashtable Master; //key=device, value=list of settings to watch
private static Monitor instance = new Monitor();
private Monitor() {}
public static Monitor getMonitor()
{
return instance;
}
public void register(watchlist){...}
public void unregister(...){...}
public void update(){...}
}
register () / unregister () выполнить добавление / удаление в hastable.
update () только читает информацию из хеш-таблицы.
В зависимости от количества устройств и настроек, update () будет выполнять итерацию по таблице и ее содержимому, получая последние значения.
Основной поток, возможно, вызывает регистрацию и отмену регистрации довольно часто, и я хочу, чтобы графический интерфейс оставался отзывчивым. Какой хороший способ сделать это?
Блокирую ли я хеш-таблицу, добавляю / удаляю и повторяю, ИЛИ просто добавляю итерационную часть в обновление с помощью команды try catch (ах, изящно не удается), чтобы перехватить любое странное состояние, в которое может попасть хеш-таблица (без блокировки) или нет какой-то лучший способ сделать это (если обновление не удастся, все равно будет запущено через 200 мс).
Не совсем уверен в том, что происходит, потому что код не показывает каких-либо проблем, что само по себе делает меня немного неловким, потому что это кажется неправильным. Спасибо за любые предложения ...