示例#1
0
        public static void Subscribe(string filePath, OnFileChangedDelegate handler)
        {
            Verify.ArgumentNotNullOrEmpty(filePath, "filePath");
            Verify.ArgumentNotNull(handler, "handler");

            EnsureInitialization();

            int counterValue = Interlocked.Increment(ref _counter);

            if (counterValue % 100 == 0)
            {
                ClearDeadReferences();
            }

            var weakInvocationList = new List <Pair <MethodInfo, WeakReference> >();

            foreach (Delegate func in handler.GetInvocationList())
            {
                var targetObject = func.Target;
                if (targetObject == null)
                {
                    weakInvocationList.Add(new Pair <MethodInfo, WeakReference>(func.Method, null));
                }
                else
                {
                    weakInvocationList.Add(new Pair <MethodInfo, WeakReference>(func.Method, new WeakReference(handler.Target)));
                }
            }

            string key = filePath.ToLowerInvariant();

            lock (_syncRoot)
            {
                if (_subscribers.ContainsKey(key))
                {
                    ReadOnlyCollection <Pair <MethodInfo, WeakReference> > oldList = _subscribers[key];

                    var newList = new ReadOnlyCollection <Pair <MethodInfo, WeakReference> >(
                        new List <Pair <MethodInfo, WeakReference> >(oldList.Concat(weakInvocationList)));

                    _subscribers[key] = newList;
                }
                else
                {
                    _subscribers.Add(key, new ReadOnlyCollection <Pair <MethodInfo, WeakReference> >(weakInvocationList));
                }
            }
        }
        public static void Subscribe(string filePath, OnFileChangedDelegate handler)
        {
            Verify.ArgumentNotNullOrEmpty(filePath, "filePath");
            Verify.ArgumentNotNull(handler, "handler");

            EnsureInitialization();

            int counterValue = Interlocked.Increment(ref _counter);
            if (counterValue % 100 == 0)
            {
                ClearDeadReferences();
            }

            var weakInvocationList = new List<Pair<MethodInfo, WeakReference>>();
            foreach (Delegate func in handler.GetInvocationList())
            {
                var targetObject = func.Target;
                if (targetObject == null)
                {
                    weakInvocationList.Add(new Pair<MethodInfo, WeakReference>(func.Method, null));
                }
                else
                {
                    weakInvocationList.Add(new Pair<MethodInfo, WeakReference>(func.Method, new WeakReference(handler.Target)));
                }
            }

            string key = filePath.ToLowerInvariant();
            lock (_syncRoot)
            {
                if (_subscribers.ContainsKey(key))
                {
                    ReadOnlyCollection<Pair<MethodInfo, WeakReference>> oldList = _subscribers[key];

                    var newList = new ReadOnlyCollection<Pair<MethodInfo, WeakReference>>(
                        new List<Pair<MethodInfo, WeakReference>>(oldList.Concat(weakInvocationList)));

                    _subscribers[key] = newList;
                }
                else
                {
                    _subscribers.Add(key, new ReadOnlyCollection<Pair<MethodInfo, WeakReference>>(weakInvocationList));
                }
            }
        }
 public void SubscribeOnFileChanged(IFile file, OnFileChangedDelegate handler)
 {
     FileChangeNotificator.Subscribe(file as FileSystemFileBase, handler);
 }
示例#4
0
        public static void Subscribe(FileSystemFileBase file, OnFileChangedDelegate handler)
        {
            Verify.ArgumentNotNull(file, "file");

            Subscribe(file.SystemPath, handler);
        }
        /// <exclude />
        public static void SubscribeOnChanged(this IFile file, OnFileChangedDelegate handler)
        {
            IFileStreamManager manager = FileStreamManagerLocator.GetFileStreamManager(file.GetType());

            manager.SubscribeOnFileChanged(file, handler);
        }
示例#6
0
        /// <exclude />
        public static void SubscribeOnChanged(this IFile file, OnFileChangedDelegate handler)
        {
            IFileStreamManager manager = FileStreamManagerLocator.GetFileStreamManager(file.GetType());

            manager.SubscribeOnFileChanged(file, handler);
        }
        public static void Subscribe(FileSystemFileBase file, OnFileChangedDelegate handler)
        {
            Verify.ArgumentNotNull(file, "file");

            Subscribe(file.SystemPath, handler);
        }
 public void SubscribeOnFileChanged(IFile file, OnFileChangedDelegate handler)
 {
     throw new NotSupportedException();
 }
 public void SubscribeOnFileChanged(IFile file, OnFileChangedDelegate handler)
 {
     FileChangeNotificator.Subscribe(file as FileSystemFileBase, handler);
 }
示例#10
0
 /// <exclude />
 public void SubscribeOnFileChanged(IFile file, OnFileChangedDelegate handler)
 {
     // Do nothing...
 }
示例#11
0
 /// <exclude />
 public void SubscribeOnFileChanged(IFile file, OnFileChangedDelegate handler)
 {
     // Do nothing...
 }