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
}