Torna al Thread

public static class FileChangesMonitor { private static readonly PropertyInfo fileChangesMonitorProperty = typeof(HttpRuntime).GetProperty("FileChangesMonitor", BindingFlags.NonPublic | BindingFlags.Static); private static readonly FieldInfo callbackRenameOrCriticaldirChangeField = fileChangesMonitorProperty.PropertyType. GetField("_callbackRenameOrCriticaldirChange", BindingFlags.NonPublic | BindingFlags.Instance); private static object callbackRenameOrCriticaldirChange; /// <summary> /// Disables rename or critical-directory change monitoring. /// </summary> public static IDisposable Disable() { var fileChangesMonitor = GetFileChangesMonitor(); callbackRenameOrCriticaldirChange = callbackRenameOrCriticaldirChangeField.GetValue(fileChangesMonitor); callbackRenameOrCriticaldirChangeField.SetValue(fileChangesMonitor, null); return new MonitoringDisabledScope(); } /// <summary> /// Enable rename or critical-directory change monitoring. /// </summary> public static void Enable() { if (callbackRenameOrCriticaldirChange != null) { var fileChangesMonitor = GetFileChangesMonitor(); callbackRenameOrCriticaldirChangeField.SetValue(fileChangesMonitor, callbackRenameOrCriticaldirChange); callbackRenameOrCriticaldirChange = null; } } /// <summary> /// Gets the current HttpRuntime.FileChangesMonitor property value. /// </summary> private static object GetFileChangesMonitor() { return fileChangesMonitorProperty.GetValue(null, null); } #region Nested type: MonitoringDisabledScope /// <summary> /// The scope inside which file changes monitoring is disabled. /// </summary> private class MonitoringDisabledScope : IDisposable { /// <inheritdoc /> public void Dispose() { Enable(); } } #endregion }
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5