void Init()
            {
                NSAutoreleasePool pool = new NSAutoreleasePool();

                _callback = new CoreServices.FSEventStreamCallback(OnFsEvent);

                var pathptrs = new List <IntPtr>();

                foreach (string path in _paths)
                {
                    pathptrs.Add(CoreFoundation.CFSTR(new StringBuilder(path)));
                }

                _stream = CoreServices.FSEventStreamCreate(IntPtr.Zero,
                                                           _callback,
                                                           IntPtr.Zero,
                                                           CoreFoundation.CFArrayCreate(pathptrs.ToArray()),
                                                           CoreServices.kFSEventStreamEventIdSinceNow,
                                                           1.0,
                                                           CoreServices.kFSEventStreamCreateFlagWatchRoot);

                CoreServices.FSEventStreamScheduleWithRunLoop(_stream,
                                                              RunLoopHelper.GetRunLoop(),
                                                              CoreFoundation.kCFRunLoopDefaultMode);

                CoreServices.FSEventStreamStart(_stream);

                //CoreServices.FSEventStreamShow(_stream);

                pool.Dispose();
            }
 public void Dispose()
 {
     Trace(DateTime.Now + " FsEventsWatcher: stop stream");
     CoreServices.FSEventStreamStop(_stream);
     Trace(DateTime.Now + " FsEventsWatcher: invalidate stream");
     CoreServices.FSEventStreamInvalidate(_stream);
     Trace(DateTime.Now + " FsEventsWatcher: release stream");
     CoreServices.FSEventStreamRelease(_stream);
     _callback = null;
     Trace(DateTime.Now + " FsEventsWatcher: disposed");
 }