ThinkGeo.com    |     Documentation    |     Premium Support

Exception in TrackOverlay

Hi,


While going over our logs of unhandled exceptions experienced by our users, we found the following exception in the TrackOverlay... 


 


Index must be within the bounds of the List.

Parameter name: index

   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)

   at System.Collections.ObjectModel.Collection`1.Insert(Int32 index, T item)

   at ThinkGeo.MapSuite.WpfDesktopEdition.TrackInteractiveOverlay.MouseDownCore(InteractionArguments interactionArguments)

   at ThinkGeo.MapSuite.WpfDesktopEdition.InteractiveOverlay.MouseDown(InteractionArguments interactionArguments)

   at ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap.vRU=(InteractionArguments vhU=)

   at ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap.uhU=(Object uxU=, MouseButtonEventArgs vBU=)

   at 0hM=.VBc=.vRc=(Object vhc=, MouseButtonEventArgs vxc=)

   at 0hM=.VBc=.wBc=(Object wRc=, MouseButtonEventArgs whc=)

   at 0hM=.VBc=.OnMouseMove(Object sender, MouseEventArgs e)

   at System.Windows.Input.MouseEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)

   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)

   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)

   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)

   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)

   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)

   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)

   at System.Windows.Input.InputManager.ProcessStagingArea()

   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)

   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)

   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr  hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x,  Int32 y, Int32 wheel)

   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr  hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean&  handled)

   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd,  Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)

   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)

   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object  source, Delegate method, Object args, Int32 numArgs, Delegate  catchHandler)


 


I only have the stacktrace and don't know what the user was doing to produce this error.  I would guess it has something to do with drawing just based off the stack trace... any insight would be appreciated.


 


.Ryan.



Hello Ryan,  
  
 Thanks for your post, this is not our internal exception, so sorry to say without sample or how to recreate it, we don’t know the root cause, and I have checked the code, possibly it’s caused by polygon track, it should have three vertex to create a polygon, and maybe the trackoverlay only contains one or two vertex or none. So the code below throw exception.  
  
 this.Vertices[2] = new Vertex(xInWorld, yInWorld); 
  
 But I don’t why it will happen, so if you can find a way to recreate it or provide a sample, that will be helpful. 
  
 Regards, 
  
 Gary

okay, so I was able to track down how to reproduce it... the bug has to do with some code I got from a previous post on programatically cancelling a track layer.  I've attached a sample.  If you click polygon, draw a couple points but don't complete it, click the cancel button, then click polygon and try to draw a point, the application explodes with the exception.  Thank you for your help.


 


.Ryan.



003_002_001_WpfApplication1.zip (14.3 KB)

Hello Ryan, 
  
 Thanks for your further information, that helps a lot, I can recreate it. 
  
 I will find the root cause and post here as soon as possible. 
  
 Regards, 
  
 Gary

Hi Gary, 
  
 Just wanted to see if you have any follow up to this issue yet? 
  
 Thanks, 
 .Ryan.

Bump

Hello Ryan,


My apologize, we have resolved this problem long time ago, but looks like it's a internal system error, we lost the connection with this post, I finally find the resolve solution in our system and post, sorry for long time waiting.


The error reason is in you cancel method, you didn't clear all necessary property, except clean the vertices and change the trackmode, you still need to set MouseDownCount and clear the tracking flag.


Please check the code below:



        public void Cancel()
        {
            if (TrackShapeLayer.InternalFeatures.Count > 0)
            {
                TrackShapeLayer.InternalFeatures.RemoveAt(TrackShapeLayer.InternalFeatures.Count - 1);
            }
            EndTracking();
            MouseDownCount = 0;
            Vertices.Clear();
            TrackMode = TrackMode.None;
            Refresh();
        }

Thanks for your patience, regards,


Gary



Thanks Gary… no problem about the delay, the code worked perfectly… thank you very much :)!

Hello Ryan, 
  
 Please feel free to let us know your problems. 
  
 Regards, 
  
 Gary