响应数据更改时的事件

时间:2013-07-11 23:41:44

标签: c# delegates

我有一个静态类列表,它暴露了几个基本静态数据的列表。

但是,该数据可以在应用程序中不时修改。

我想要的是我的静态类根据将保存任何更改的代码引发的事件重新加载数据。

所以我认为我需要有一个事件和一个代表,但我在查看事件和代表的去向以及提出事件的人以及等等方面遇到了一些麻烦。

此时我所拥有的只是一个静态类,它在构造函数中加载数据,并在其他地方加载更新数据。

修改

我是否应该简单地在静态类中调用另一个方法来重新加载数据而不是担心引发事件?我的意思是,我是否使代码复杂化?

1 个答案:

答案 0 :(得分:0)

您可以使用自2.0以来在C#/ SQL 2005中可用的SqlDependency class来接收静态类中的通知,这些通知是关于您在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.
        }
    }