bool hasChanged;
#if NET_2_0
bool used;
+ DateTime utcLastModified;
#endif
object locker = new object ();
} else
continue;
}
+ watcher.NotifyFilter |= NotifyFilters.Size;
watcher.Created += new FileSystemEventHandler (OnChanged);
watcher.Changed += new FileSystemEventHandler (OnChanged);
watcher.Deleted += new FileSystemEventHandler (OnChanged);
if (dependency != null)
dependency.DependencyChanged += new EventHandler (OnChildDependencyChanged);
this.start = start;
+
+#if NET_2_0
+ FinishInit ();
+#endif
}
#if NET_2_0
#endif
void OnChanged (object sender, FileSystemEventArgs args)
+ {
+ OnDependencyChanged (sender, args);
+ }
+
+ bool DoOnChanged ()
{
if (DateTime.Now < start)
- return;
+ return false;
hasChanged = true;
+#if NET_2_0
+ utcLastModified = DateTime.UtcNow;
+#endif
DisposeWatchers ();
if (cache != null)
cache.CheckExpiration ();
+
+ return true;
}
-
+
void DisposeWatchers ()
{
lock (locker) {
watchers = null;
}
}
+
public void Dispose ()
{
+ DependencyDispose ();
+ }
+
+#if NET_2_0
+ internal virtual void DependencyDisposeInternal ()
+ {
+ }
+#endif
+
+#if NET_2_0
+ protected virtual
+#endif
+ void DependencyDispose ()
+ {
+#if NET_2_0
+ DependencyDisposeInternal ();
+#endif
DisposeWatchers ();
if (dependency != null)
dependency.DependencyChanged -= new EventHandler (OnChildDependencyChanged);
}
#if NET_2_0
+ protected internal void FinishInit ()
+ {
+ utcLastModified = DateTime.UtcNow;
+ }
+
internal bool IsUsed {
get { return used; }
}
get { return start; }
set { start = value; }
}
+
+ public DateTime UtcLastModified {
+ get {
+ return utcLastModified;
+ }
+ }
+
+ protected void SetUtcLastModified (DateTime utcLastModified)
+ {
+ this.utcLastModified = utcLastModified;
+ }
#endif
public bool HasChanged {
}
}
- void OnChildDependencyChanged (object o, EventArgs a)
+ void OnChildDependencyChanged (object o, EventArgs e)
{
hasChanged = true;
- OnDependencyChanged ();
+ OnDependencyChanged (o, e);
}
- void OnDependencyChanged ()
+ void OnDependencyChanged (object sender, EventArgs e)
{
- if (DependencyChanged != null)
- DependencyChanged (this, null);
+ if (!DoOnChanged ())
+ return;
+
+ if (DependencyChanged == null)
+ return;
+
+ foreach (EventHandler eh in DependencyChanged.GetInvocationList ())
+ eh (sender, e);
}
#if NET_2_0
- internal void SignalDependencyChanged ()
+ protected
+#else
+ internal
+#endif
+ void NotifyDependencyChanged (object sender, EventArgs e)
{
- OnDependencyChanged ();
+ OnDependencyChanged (sender, e);
}
-#endif
+
internal event EventHandler DependencyChanged;
}
}