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
- _KerberosClient.cs
- OutputCacheSection.cs
- Command.cs
- BrowsableAttribute.cs
- SqlAliasesReferenced.cs
- PeerApplicationLaunchInfo.cs
- CursorConverter.cs
- VisualStyleElement.cs
- TextEditorTyping.cs
- SqlDataSourceConfigureSelectPanel.cs
- ScopelessEnumAttribute.cs
- XmlMapping.cs
- _FixedSizeReader.cs
- WebPartDescription.cs
- SamlAttribute.cs
- PerfCounters.cs
- AnimationLayer.cs
- SettingsPropertyValueCollection.cs
- ToolboxItemFilterAttribute.cs
- SystemMulticastIPAddressInformation.cs
- WebPermission.cs
- HtmlHistory.cs
- SelectedCellsCollection.cs
- XmlSchemaAttribute.cs
- XmlSerializationWriter.cs
- ApplicationFileCodeDomTreeGenerator.cs
- ItemCollection.cs
- PolyBezierSegment.cs
- Transform3D.cs
- StorageInfo.cs
- Executor.cs
- NoPersistScope.cs
- AssemblyInfo.cs
- HttpException.cs
- DataContractFormatAttribute.cs
- TransactionChannel.cs
- ContentIterators.cs
- XmlCharacterData.cs
- BinaryCommonClasses.cs
- ContextMenuStripGroupCollection.cs
- ThreadStaticAttribute.cs
- LocalizabilityAttribute.cs
- TypeUtil.cs
- Rect3DConverter.cs
- JsonByteArrayDataContract.cs
- DbConnectionInternal.cs
- DetailsViewRow.cs
- SoapTypeAttribute.cs
- ClickablePoint.cs
- PageCodeDomTreeGenerator.cs
- PieceDirectory.cs
- OleDbPermission.cs
- ElementHostPropertyMap.cs
- DockAndAnchorLayout.cs
- _NestedMultipleAsyncResult.cs
- CheckBox.cs
- ChildDocumentBlock.cs
- Restrictions.cs
- InvalidOleVariantTypeException.cs
- HtmlControl.cs
- AttributeTableBuilder.cs
- StateItem.cs
- CustomCredentialPolicy.cs
- SynchronizedRandom.cs
- WorkerRequest.cs
- ModelVisual3D.cs
- BinaryFormatterWriter.cs
- DataGridViewLinkColumn.cs
- ISO2022Encoding.cs
- TransformerInfo.cs
- NativeActivity.cs
- RtfControls.cs
- unitconverter.cs
- FreezableCollection.cs
- ToolStripDropTargetManager.cs
- ProgressBarRenderer.cs
- LeftCellWrapper.cs
- Selection.cs
- BmpBitmapEncoder.cs
- Rect3DConverter.cs
- ThreadStartException.cs
- AuthStoreRoleProvider.cs
- XmlReflectionImporter.cs
- Calendar.cs
- PeerPresenceInfo.cs
- Bidi.cs
- JoinGraph.cs
- UnhandledExceptionEventArgs.cs
- AssemblyBuilderData.cs
- ArcSegment.cs
- CompositeTypefaceMetrics.cs
- ManagementObjectSearcher.cs
- linebase.cs
- SqlIdentifier.cs
- CipherData.cs
- MetaColumn.cs
- InfoCardClaimCollection.cs
- TypeCollectionDesigner.xaml.cs
- Evaluator.cs
- XmlBinaryWriterSession.cs