private void RunAsyncListener(ChangeListener listener)
 {
     listener.BeginInvoke((ar) =>
     {
         AsyncResult result    = (AsyncResult)ar;
         ChangeListener caller = (ChangeListener)result.AsyncDelegate;
         caller.EndInvoke(ar);
     }, null);
 }