// return true if the uri is different
            public bool StartPing()
            {
                lastPingTime = DateTime.Now;
                bool isNewUri = false;

                try {
                    OperationalUIFacade facade = (OperationalUIFacade)OperationalInterface.ObjectDirectory.Resolve(name);
                    string newUri = RemotingServices.GetObjectUri(facade);
                    if (newUri != uri)
                    {
                        isNewUri = true;
                        uri      = newUri;
                        if (responseStatus != ResponseStatus.Unknown)
                        {
                            responseStatus = ResponseStatus.Unknown;
                            parent.OnPingCompleted(this);
                        }
                    }

                    pingInvoker = facade.Ping;
                    ThreadPool.QueueUserWorkItem(DoPing, pingInvoker);
                }
                catch (Exception) {
                    if (responseStatus != ResponseStatus.Down)
                    {
                        responseStatus = ResponseStatus.Down;
                        parent.OnPingCompleted(this);
                    }
                }

                return(isNewUri);
            }