Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / DynamicData / DynamicData / Util / FileChangeNotifier.cs / 1305376 / FileChangeNotifier.cs
using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Web.UI; using System.Web.UI.WebControls; using System.Collections.Specialized; using System.Diagnostics; using System.Web.Resources; using System.Globalization; using System.Web.Caching; using System.Web.Hosting; namespace System.Web.DynamicData { delegate void FileChangedCallback(string path); class FileChangeNotifier { private static VirtualPathProvider _vpp; internal static VirtualPathProvider VirtualPathProvider { private get { if (_vpp == null) { _vpp = HostingEnvironment.VirtualPathProvider; } return _vpp; } // For unit test purpose set { _vpp = value; } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "System.Web.DynamicData.FileChangeNotifier", Justification="The object deals with file change notifications and we don't need to hold on to it")] internal static void Register(string virtualPath, FileChangedCallback onFileChanged) { new FileChangeNotifier(virtualPath, onFileChanged); } private FileChangedCallback _onFileChanged; private FileChangeNotifier(string virtualPath, FileChangedCallback onFileChanged) { _onFileChanged = onFileChanged; RegisterForNextNotification(virtualPath); } private void RegisterForNextNotification(string virtualPath) { // Get a CacheDependency from the BuildProvider, so that we know anytime something changes var virtualPathDependencies = new List(); virtualPathDependencies.Add(virtualPath); CacheDependency cacheDependency = VirtualPathProvider.GetCacheDependency( virtualPath, virtualPathDependencies, DateTime.UtcNow); // Rely on the ASP.NET cache for file change notifications, since FileSystemWatcher // doesn't work in medium trust HttpRuntime.Cache.Insert(virtualPath /*key*/, virtualPath /*value*/, cacheDependency, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, new CacheItemRemovedCallback(OnCacheItemRemoved)); } private void OnCacheItemRemoved(string key, object value, CacheItemRemovedReason reason) { // We only care about dependency changes if (reason != CacheItemRemovedReason.DependencyChanged) return; _onFileChanged(key); // We need to register again to get the next notification RegisterForNextNotification(key); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Web.UI; using System.Web.UI.WebControls; using System.Collections.Specialized; using System.Diagnostics; using System.Web.Resources; using System.Globalization; using System.Web.Caching; using System.Web.Hosting; namespace System.Web.DynamicData { delegate void FileChangedCallback(string path); class FileChangeNotifier { private static VirtualPathProvider _vpp; internal static VirtualPathProvider VirtualPathProvider { private get { if (_vpp == null) { _vpp = HostingEnvironment.VirtualPathProvider; } return _vpp; } // For unit test purpose set { _vpp = value; } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "System.Web.DynamicData.FileChangeNotifier", Justification="The object deals with file change notifications and we don't need to hold on to it")] internal static void Register(string virtualPath, FileChangedCallback onFileChanged) { new FileChangeNotifier(virtualPath, onFileChanged); } private FileChangedCallback _onFileChanged; private FileChangeNotifier(string virtualPath, FileChangedCallback onFileChanged) { _onFileChanged = onFileChanged; RegisterForNextNotification(virtualPath); } private void RegisterForNextNotification(string virtualPath) { // Get a CacheDependency from the BuildProvider, so that we know anytime something changes var virtualPathDependencies = new List (); virtualPathDependencies.Add(virtualPath); CacheDependency cacheDependency = VirtualPathProvider.GetCacheDependency( virtualPath, virtualPathDependencies, DateTime.UtcNow); // Rely on the ASP.NET cache for file change notifications, since FileSystemWatcher // doesn't work in medium trust HttpRuntime.Cache.Insert(virtualPath /*key*/, virtualPath /*value*/, cacheDependency, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, new CacheItemRemovedCallback(OnCacheItemRemoved)); } private void OnCacheItemRemoved(string key, object value, CacheItemRemovedReason reason) { // We only care about dependency changes if (reason != CacheItemRemovedReason.DependencyChanged) return; _onFileChanged(key); // We need to register again to get the next notification RegisterForNextNotification(key); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Activity.cs
- VarRemapper.cs
- BrowserCapabilitiesFactory.cs
- RsaKeyGen.cs
- ToolStripArrowRenderEventArgs.cs
- StringDictionaryEditor.cs
- SizeAnimationUsingKeyFrames.cs
- TableCellAutomationPeer.cs
- XmlElementAttributes.cs
- AssociationEndMember.cs
- _SpnDictionary.cs
- BlurEffect.cs
- WindowsListViewGroupHelper.cs
- UnionCqlBlock.cs
- PackageProperties.cs
- RectangleGeometry.cs
- ComboBoxRenderer.cs
- PathSegment.cs
- SoapElementAttribute.cs
- TimeSpan.cs
- ConfigurationHelpers.cs
- ToolboxItemLoader.cs
- XmlException.cs
- InternalControlCollection.cs
- WriteableBitmap.cs
- FlowchartStart.xaml.cs
- GatewayIPAddressInformationCollection.cs
- NativeObjectSecurity.cs
- TextureBrush.cs
- XsltInput.cs
- FormClosedEvent.cs
- TypeSource.cs
- Expressions.cs
- FontDriver.cs
- EntityViewGenerator.cs
- LocatorManager.cs
- RenderOptions.cs
- XmlSignificantWhitespace.cs
- DrawingImage.cs
- Delegate.cs
- XmlPropertyBag.cs
- ToolBar.cs
- UnsafeNativeMethods.cs
- Registration.cs
- Vector3DAnimationBase.cs
- Tool.cs
- AssemblyFilter.cs
- OrderedDictionary.cs
- RoutedPropertyChangedEventArgs.cs
- BitmapCacheBrush.cs
- BaseDataListComponentEditor.cs
- ButtonFieldBase.cs
- TablePattern.cs
- DataGridRow.cs
- ContentControl.cs
- ConnectionAcceptor.cs
- EFDataModelProvider.cs
- WindowClosedEventArgs.cs
- XhtmlConformanceSection.cs
- ScriptBehaviorDescriptor.cs
- CriticalFileToken.cs
- ComponentTray.cs
- HotCommands.cs
- RegistryPermission.cs
- PolyQuadraticBezierSegment.cs
- DesignerDataTableBase.cs
- NativeMethods.cs
- ControlDesigner.cs
- FormViewModeEventArgs.cs
- IndependentAnimationStorage.cs
- LineGeometry.cs
- PerformanceCounterCategory.cs
- MdiWindowListItemConverter.cs
- WorkflowDurableInstance.cs
- MenuAutomationPeer.cs
- RawKeyboardInputReport.cs
- CaseExpr.cs
- EntityTypeEmitter.cs
- XmlAttributeOverrides.cs
- Compiler.cs
- DescendentsWalkerBase.cs
- PointValueSerializer.cs
- OrderByBuilder.cs
- XmlnsPrefixAttribute.cs
- ConfigurationPropertyCollection.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- AssemblyNameProxy.cs
- printdlgexmarshaler.cs
- XmlSchemaObjectCollection.cs
- SafeNativeMethodsOther.cs
- InstanceCollisionException.cs
- FileSystemWatcher.cs
- ConfigurationStrings.cs
- UnsafeNativeMethods.cs
- QilList.cs
- SmtpClient.cs
- CodeTypeDeclarationCollection.cs
- EditorBrowsableAttribute.cs
- MultiSelector.cs
- SerializationObjectManager.cs