2013-07-11 1 views
0

У меня есть статический класс списков, который предоставляет несколько списков в основном статических данных.Ответ на события при изменении данных

Однако эти данные могут быть изменены в приложении время от времени.

Я хочу, чтобы мой статический класс перезагружал данные на основе события, вызванного кодом, который сохранит любые изменения.

Так что я думаю, что я должен быть и событие, и делегат, но у меня мало проблем с визуализацией, где событие и делегат идти, а также кто вызывает событие, и как и т.д.

Все У меня на данный момент есть статический класс, который в своем конструкторе загружает данные и класс в другом месте, который обновляет данные.

редактировать

Должен ли я просто вызвать другой метод в статическом классе, чтобы перезагрузить данные вместо того, чтобы беспокоиться о повышении событий? Я имею в виду, я слишком усложняю код?

+0

Если вы не хотите иметь дело с SqlDependency, то я бы обязательно идти с простым методом в статическом классе, чтобы аннулировать свой список, а затем заставить его быть перезагружен в следующий раз это доступ. – Tombala

+0

Постарайтесь описать свой вопрос лучше. Опишите, как взаимодействуют ваши классы, некоторые методы. Просто пример. Вы можете использовать список строк в качестве примера ваших данных. –

+0

Являются ли ваши данные изменены вне вашего приложения? У вас есть контроль над кодом, который выполняет модификацию? –

ответ

0

Вы можете использовать SqlDependency class, который был доступен в C#/SQL 2005 с версии 2.0 для получения уведомлений внутри вашего статического класса об изменениях в кешировании данных, поскольку он обновлен в SQL.

Тогда в вашем коде вам не нужно создавать какие-либо зависимости по вашим классам, чтобы уведомить друг друга об изменениях.

Обратите внимание, что для получения уведомлений есть влияние на производительность, но если, как вы говорите, эти данные не часто меняются, вы должны быть в порядке. Кроме того, существуют определенные ограничения для операторов SELECT, которые соответствуют требованиям для уведомления. Это все перечислено по этой ссылке.

В одном из моих текущих проектов у меня есть аналогичный класс, который я использую для конфигураций, где я решил не использовать зависимость, а вместо этого использовал метод недействительности, аналогичный тому, что вы пытаетесь сделать. Схема выглядит следующим образом:

private static ReaderWriterLock lockObject = new ReaderWriterLock(); 

    public static void Invalidate() 
    { 
     try 
     { 
      lockObject.AcquireWriterLock(LockTimeoutMilliseconds); 
      try 
      { 
       // Invalidate your content and reload here 
      } 
      finally 
      { 
       lockObject.ReleaseLock(); 
      } 
     } 
     catch (ApplicationException ex) 
     { 
      // The reader lock request timed out. Log this. 
     } 
    } 
+0

О, круто. Кажется, что образцы с его использованием EF тоже идеальны. – griegs

+0

Не совсем то, что мне нужно, но я понимаю. Я просто пошел с вызовом метода в классе, чтобы перезагрузить биты данных, которые мне нужны. – griegs

Смежные вопросы