2013-07-11 32 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