public void RefreshWeatherItem(WeatherItemEventArgs weatherItemInfo)
 {
     try
     {
         // Invoke the RefreshInternal through its delegate
         if (!this.IsDisposed && this.IsHandleCreated)
         {
             Invoke(new RefreshWeatherItemHelper(RefreshWeatherItemInvoked), new object[] { weatherItemInfo });
         }
     }
     catch (Exception ex)
     {
         System.Diagnostics.Trace.WriteLine(ex.Message);
     }
 }
            private void RefreshWeatherItemInvoked(WeatherItemEventArgs weatherItemInfo)
            {
                ITransformation transform = m_activeView.ScreenDisplay.DisplayTransformation as ITransformation;

                if (transform == null)
                {
                    return;
                }

                double[] iconDimensions = new double[2];
                iconDimensions[0] = (double)weatherItemInfo.IconWidth;
                iconDimensions[1] = (double)weatherItemInfo.IconHeight;

                double[] iconDimensionsMap = new double[2];

                transform.TransformMeasuresFF(esriTransformDirection.esriTransformReverse, 1, ref iconDimensionsMap[0], ref iconDimensions[0]);

                m_invalidateExtent.PutCoords(0, 0, iconDimensionsMap[0], iconDimensionsMap[0]);
                m_point.PutCoords(weatherItemInfo.mapX, weatherItemInfo.mapY);
                m_invalidateExtent.CenterAt(m_point);

                m_activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, m_weatherLayer, m_invalidateExtent);
                m_activeView.ScreenDisplay.UpdateWindow();
            }
 /// <summary>
 /// weather layer ItemAdded event handler
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 /// <remarks>gets fired when an item is added to the table</remarks>
 private void OnWeatherItemAdded(object sender, WeatherItemEventArgs args)
 {
     // use the invoke helper since this event gets fired on a different thread
     m_invokeHelper.RefreshWeatherItem(args);
 }