private void DoCallback (IntPtr streamRef, IntPtr clientCallBackInfo,
int numEvents, IntPtr eventPaths, IntPtr eventFlags, IntPtr eventIds)
{
int bytes = Marshal.SizeOf(typeof(IntPtr));
string[] paths = new string[numEvents];
for (int i = 0; i < numEvents; ++i) {
IntPtr p = Marshal.ReadIntPtr(eventPaths, i * bytes);
paths[i] = Marshal.PtrToStringAnsi(p);
checkDirectory(paths[i]);
}
var handler = Changed;
if (handler != null) {
string path = paths[0];
path = path.Substring(Path.Length);
path = path.Trim("/".ToCharArray());
handler(path);
}
GC.KeepAlive(this);
}