ErrorEvent,
RenameEvent
}
-
- protected void OnChanged (FileSystemEventArgs e)
+ private void RaiseEvent (Delegate ev, EventArgs arg, EventType evtype)
{
- if (Changed == null)
+ if (ev == null)
return;
- if (synchronizingObject == null)
- Changed (this, e);
- else
- synchronizingObject.BeginInvoke (Changed, new object[] { this, e });
+ if (synchronizingObject == null) {
+ foreach (var target in ev.GetInvocationList()) {
+ switch (evtype) {
+ case EventType.RenameEvent:
+ ((RenamedEventHandler)target).BeginInvoke (this, (RenamedEventArgs)arg, null, null);
+ break;
+ case EventType.ErrorEvent:
+ ((ErrorEventHandler)target).BeginInvoke (this, (ErrorEventArgs)arg, null, null);
+ break;
+ case EventType.FileSystemEvent:
+ ((FileSystemEventHandler)target).BeginInvoke (this, (FileSystemEventArgs)arg, null, null);
+ break;
+ }
+ }
+ return;
+ }
+
+ synchronizingObject.BeginInvoke (ev, new object [] {this, arg});
}
- protected void OnCreated (FileSystemEventArgs e)
+ protected void OnChanged (FileSystemEventArgs e)
{
- if (Created == null)
- return;
+ RaiseEvent (Changed, e, EventType.FileSystemEvent);
+ }
- if (synchronizingObject == null)
- Created (this, e);
- else
- synchronizingObject.BeginInvoke (Created, new object[] { this, e });
+ protected void OnCreated (FileSystemEventArgs e)
+ {
+ RaiseEvent (Created, e, EventType.FileSystemEvent);
}
protected void OnDeleted (FileSystemEventArgs e)
{
- if (Deleted == null)
- return;
-
- if (synchronizingObject == null)
- Deleted (this, e);
- else
- synchronizingObject.BeginInvoke (Deleted, new object[] { this, e });
+ RaiseEvent (Deleted, e, EventType.FileSystemEvent);
}
- internal void OnError (ErrorEventArgs e)
+ protected void OnError (ErrorEventArgs e)
{
- if (Error == null)
- return;
-
- if (synchronizingObject == null)
- Error (this, e);
- else
- synchronizingObject.BeginInvoke (Error, new object[] { this, e });
+ RaiseEvent (Error, e, EventType.ErrorEvent);
}
protected void OnRenamed (RenamedEventArgs e)
{
- if (Renamed == null)
- return;
-
- if (synchronizingObject == null)
- Renamed (this, e);
- else
- synchronizingObject.BeginInvoke (Renamed, new object[] { this, e });
+ RaiseEvent (Renamed, e, EventType.RenameEvent);
}
public WaitForChangedResult WaitForChanged (WatcherChangeTypes changeType)
return result;
}
+ internal void DispatchErrorEvents (ErrorEventArgs args)
+ {
+ OnError (args);
+ }
+
internal void DispatchEvents (FileAction act, string filename, ref RenamedEventArgs renamed)
{
if (waiting) {
}
if (exc != null) {
- fsw.OnError (new ErrorEventArgs (exc));
+ fsw.DispatchErrorEvents (new ErrorEventArgs (exc));
return;
}
throw exc;
}
if (exc != null)
- fsw.OnError (new ErrorEventArgs (exc));
+ fsw.DispatchErrorEvents (new ErrorEventArgs (exc));
requestStop = false;
}
}
if ((kevt.flags & EventFlags.Error) == EventFlags.Error) {
var errMsg = String.Format ("kevent() error watching path '{0}', error code = '{1}'", pathData.Path, kevt.data);
- fsw.OnError (new ErrorEventArgs (new IOException (errMsg)));
+ fsw.DispatchErrorEvents (new ErrorEventArgs (new IOException (errMsg)));
continue;
}
var fd = open (path, O_EVTONLY, 0);
if (fd == -1) {
- fsw.OnError (new ErrorEventArgs (new IOException (String.Format (
+ fsw.DispatchErrorEvents (new ErrorEventArgs (new IOException (String.Format (
"open() error while attempting to process path '{0}', error code = '{1}'", path, Marshal.GetLastWin32Error ()))));
return null;
}
return pathData;
} catch (Exception e) {
close (fd);
- fsw.OnError (new ErrorEventArgs (e));
+ fsw.DispatchErrorEvents (new ErrorEventArgs (e));
return null;
}
string newName = newPath.Substring (fullPathNoLastSlash.Length + 1);
renamed = new RenamedEventArgs (WatcherChangeTypes.Renamed, fsw.Path, newName, name);
}
-
- inDispatch = true;
- fsw.DispatchEvents (action, path, ref renamed);
- inDispatch = false;
+
+ fsw.DispatchEvents (action, name, ref renamed);
if (fsw.Waiting) {
lock (fsw) {
return sb.ToString ();
} else {
- fsw.OnError (new ErrorEventArgs (new IOException (String.Format (
+ fsw.DispatchErrorEvents (new ErrorEventArgs (new IOException (String.Format (
"fcntl() error while attempting to get path for fd '{0}', error code = '{1}'", fd, Marshal.GetLastWin32Error ()))));
return String.Empty;
}