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
- XPathBuilder.cs
- PaperSource.cs
- RSAOAEPKeyExchangeFormatter.cs
- Lease.cs
- NonBatchDirectoryCompiler.cs
- Filter.cs
- SignatureResourceHelper.cs
- TextShapeableCharacters.cs
- IdentityReference.cs
- TripleDES.cs
- Decoder.cs
- SurrogateEncoder.cs
- SendKeys.cs
- DesignBindingEditor.cs
- XmlAtomicValue.cs
- WS2007HttpBindingCollectionElement.cs
- ScrollContentPresenter.cs
- TraceHandler.cs
- NaturalLanguageHyphenator.cs
- DataGridViewRowPostPaintEventArgs.cs
- UpdatePanelTriggerCollection.cs
- sqlser.cs
- SelectionPattern.cs
- WindowsUpDown.cs
- XmlILStorageConverter.cs
- DbConnectionPoolGroup.cs
- HTMLTextWriter.cs
- FixedSOMLineCollection.cs
- RevocationPoint.cs
- UserPersonalizationStateInfo.cs
- DesignerHierarchicalDataSourceView.cs
- TextMessageEncodingBindingElement.cs
- Calendar.cs
- Point3D.cs
- RemotingConfigParser.cs
- NativeMethods.cs
- SoundPlayerAction.cs
- WsdlBuildProvider.cs
- LineUtil.cs
- OutputCacheProviderCollection.cs
- OracleConnection.cs
- CodeMethodInvokeExpression.cs
- WindowsNonControl.cs
- OverrideMode.cs
- Validator.cs
- SqlUserDefinedAggregateAttribute.cs
- CancelRequestedQuery.cs
- XmlNamespaceMappingCollection.cs
- SiteMapNodeItem.cs
- QilInvoke.cs
- SamlAudienceRestrictionCondition.cs
- DecoderNLS.cs
- StateMachineWorkflow.cs
- TraceUtility.cs
- CompModHelpers.cs
- GeneralTransform3DTo2D.cs
- ClientData.cs
- LayoutDump.cs
- ProcessInfo.cs
- DefaultShape.cs
- CompilerParameters.cs
- ConnectionPool.cs
- FileDataSource.cs
- _HelperAsyncResults.cs
- NodeFunctions.cs
- JournalEntry.cs
- StrokeNodeData.cs
- codemethodreferenceexpression.cs
- RequestCachePolicyConverter.cs
- IndexedString.cs
- WebControlsSection.cs
- OperationPickerDialog.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- XmlObjectSerializer.cs
- AnnouncementClient.cs
- Transform.cs
- PrintEvent.cs
- XPathNodeList.cs
- Set.cs
- DocumentOutline.cs
- FunctionMappingTranslator.cs
- ChangeBlockUndoRecord.cs
- CreateUserWizardStep.cs
- Viewport3DVisual.cs
- HttpMethodAttribute.cs
- ClaimTypeElementCollection.cs
- ResXResourceReader.cs
- IisTraceListener.cs
- XmlSerializationReader.cs
- CodeAttributeArgument.cs
- PageWrapper.cs
- InfoCardMetadataExchangeClient.cs
- SHA384.cs
- VirtualPathUtility.cs
- PersonalizationProviderHelper.cs
- CodeThrowExceptionStatement.cs
- GenericIdentity.cs
- XmlSerializerFactory.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- ProviderSettings.cs