2013-07-11 33 views
0

我有一個靜態類的列表,它公開了大量靜態數據的幾個列表。響應數據更改時的事件

但是,該數據可以在應用程序中隨時修改。

我想要的是我的靜態類根據代碼引發的事件重新加載數據,該代碼將保存所有更改。

所以我想我需要和事件和委託,但我有一個小麻煩可視化該事件和委託去和誰引發事件,以及如何等

所有在這一點上,我有一個靜態類,它在構造函數中加載數據,並在其他地方加載更新數據的類。

編輯

我應該簡單地調用靜態類的另一種方法來重新加載,而不是擔心引發事件的數據?我的意思是,我是否在複雜的代碼?

+0

如果你不想處理SqlDependency,那麼我肯定會在你的靜態類中使用一個簡單的方法來使你的列表失效,然後強制它在下一次被重新加載時訪問。 – Tombala

+0

試着更好地描述你的問題。描述你的類如何交互,一些方法。只是例子。您可以使用字符串列表作爲您的數據示例 –

+0

您的數據是否在應用程序之外進行了修改?你有控制執行修改的代碼嗎? –

回答

0

你可以使用SqlDependency class,因爲2.0這一直是提供C#/ SQL 2005收到您的靜態類的內部通知有關更改,因爲它是在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