Ejemplo n.º 1
0
        private void OnFileWatcherChanged(object source, FileSystemEventArgs e)
        {
            lock (this)
            {
                if (e.ChangeType == WatcherChangeTypes.Deleted)
                {
                    return;
                }

                if (_fwatcher != null)
                {
                    _fwatcher.EnableRaisingEvents = false;
                }

                FileObjectEventArgs <T> evArgs = null;
                try
                {
                    Core.Log.Warning("File for object {0} => {1}. Reloading file: {2}", typeof(T).Name, e.ChangeType, FilePath);
                    var oldId    = _id;
                    var oldValue = _instance;
                    LoadFile();
                    var newId    = _id;
                    var newValue = _instance;
                    Core.Log.Warning("File for object {0} => File loaded.", typeof(T).Name, e.ChangeType);
                    evArgs = new FileObjectEventArgs <T>(FilePath, oldId, oldValue, newId, newValue);
                }
                catch (Exception ex)
                {
                    OnException?.Invoke(this, new EventArgs <Exception>(ex));
                    FileObjectEvents.FireException(this, ex);
                    Core.Log.Write(ex);
                }
                finally
                {
                    if (_fwatcher != null)
                    {
                        _fwatcher.EnableRaisingEvents = true;
                    }
                    if (evArgs != null)
                    {
                        OnChanged?.Invoke(this, evArgs);
                        FileObjectEvents.FireFileObjectChanged(this, evArgs.FilePath, evArgs.OldId, evArgs.OldValue, evArgs.NewId, evArgs.NewValue);
                    }
                }
            }
        }
Ejemplo n.º 2
0
 private async void Watcher_Error(object sender, ErrorEventArgs e)
 {
     try
     {
         var watchException = e.GetException();
         OnException?.Invoke(this, new EventArgs <Exception>(watchException));
         FileObjectEvents.FireException(this, watchException);
         Try.Do(fw =>
         {
             if (fw is null)
             {
                 return;
             }
             fw.EnableRaisingEvents = false;
             fw.Dispose();
         }, _fwatcher);
         _fwatcher = null;
         var nWatcher = CreateWatcher();
         while (!nWatcher.EnableRaisingEvents)
         {
             try
             {
                 nWatcher = CreateWatcher();
             }
             catch
             {
                 await Task.Delay(500).ConfigureAwait(false);
             }
         }
         _fwatcher = nWatcher;
     }
     catch (Exception ex)
     {
         Core.Log.Write(ex);
     }
 }