Cache ASP.Net Tutorial

<%@ Page Language="C#" %>



    Custom Cache Dependency Example


     RSS URL:
       
               Text="Get RSS" />
        Cached:
        RSS:
                 Width="800px" Height="300px">
    



    void Button1_Click(object sender, System.EventArgs e)
    {
        string RSSUrl = TextBox1.Text;
        Label2.Text = "Loaded From Cache";
        if (Cache[TextBox1.Text] == null)
        {
            Label2.Text = "Loaded Fresh";
            RssCacheDependency itDepends = new RssCacheDependency(RSSUrl, 600);
            Cache.Insert(RSSUrl, itDepends.Document, itDepends);
        }
        TextBox2.Text = ((System.Xml.XmlDocument)Cache[TextBox1.Text]).OuterXml;
    }

File: App_Code\RssCacheDependency.cs
using System;
using System.Web;
using System.Threading;
using System.Web.Caching;
using System.Xml;
public class RssCacheDependency : CacheDependency
{
    static Timer backgroundThread;
    int howOften = 900;
    XmlDocument RSS;
    string RSSUrl;
    public RssCacheDependency(string URL, int polling)
    {
        howOften = polling;
        RSSUrl = URL;
        RSS = RetrieveRSS(RSSUrl);
        if (backgroundThread == null)
        {
            backgroundThread = new Timer(
                   new TimerCallback(CheckDependencyCallback),
                   this, (howOften * 1000), (howOften * 1000));
        }
    }
    public XmlDocument RetrieveRSS(string URL)
    {
        XmlDocument retVal = new XmlDocument();
        retVal.Load(URL);
        return retVal;
    }
    public void CheckDependencyCallback(object sender)
    {
        RssCacheDependency CacheDepends = sender as RssCacheDependency;
        XmlDocument NewRSS = RetrieveRSS(RSSUrl);
        if (NewRSS.OuterXml != RSS.OuterXml)
        {
            CacheDepends.NotifyDependencyChanged(CacheDepends, EventArgs.Empty);
        }
    }
    override protected void DependencyDispose()
    {
        backgroundThread = null;
        base.DependencyDispose();
    }
    public XmlDocument Document
    {
        get
        {
            return RSS;
        }
    }
}