ThinkGeo.com    |     Documentation    |     Premium Support

Refresh error

Hi,


We have recently come across an issue in the Desktop edition. Its an odd one as it was reletively stable up to recently and now has a failure rate of 1 in 5 approx


Its version 1.9.9.0 and we do not really have the option to upgrade the version due to a requirement to have a single code base for your control and a similiar mapping control from another company.


Ther error is as follows


[code]


 


 


 


System.NullReferenceException: Object reference not set to an instance of an object.

   at MapSuite.PointSymbol.<wbr></wbr>x5742df8843531008(Graphics x26463655896fd90a, PointF x16e7d05e95ffc559, Int32 xecf3f89d109103f0)

   at MapSuite.x89b9a80ac14aac3c.<wbr></wbr>x84f206812527b179(PointShape x4c00bddb787f5373, PointSymbol xf68823e5843c57b5, Graphics x4b101060f4767186)

   at MapSuite.x89b9a80ac14aac3c.<wbr></wbr>xbb3ab26224254e16(<wbr></wbr>BasePointShape x174ea74f76141149, PointSymbol xf68823e5843c57b5, Graphics x4b101060f4767186)

   at MapSuite.x89b9a80ac14aac3c.<wbr></wbr>xf589b8729f3cc594(BaseShape x03c38152d982a760, SymbolCollection x47bc1251e023ae7a, Graphics x4b101060f4767186)

   at MapSuite.x89b9a80ac14aac3c.<wbr></wbr>x856e9cb91b29b102(Graphics x4b101060f4767186, RectangleR x11b26402f0e77f36, Int32 x16b4694008f8d95e, Int32 x54b8cb6e1038ec5c, MapLengthUnits x5fee638c5fc2da6e, BaseMapShapeCollection xb0d6ab561df514a8, Single x9a041a6675113840)

   at MapSuite.x89b9a80ac14aac3c.<wbr></wbr>GetMapShapes(Graphics g, RectangleR Extent, Int32 CanvasWidth, Int32 CanvasHeight, MapLengthUnits MapUnit, Single MapRotation)

   at MapSuite.Winforms.Map.<wbr></wbr>x289dcc1ddd0e8e22(Graphics x4b101060f4767186)

   at MapSuite.Winforms.Map.<wbr></wbr>x3cd52c1053cb13d7(Object xe0292b9ed559da7d, PaintEventArgs xfbf34718e704c6bc)

   at System.Windows.Forms.Control.<wbr></wbr>OnPaint(PaintEventArgs e)

   at System.Windows.Forms.Control.<wbr></wbr>PaintWithErrorHandling(<wbr></wbr>PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)

   at System.Windows.Forms.Control.<wbr></wbr>WmPaint(Message& m)

   at System.Windows.Forms.Control.<wbr></wbr>WndProc(Message& m)

   at System.Windows.Forms.Control.<wbr></wbr>ControlNativeWindow.OnMessage(<wbr></wbr>Message& m)

   at System.Windows.Forms.Control.<wbr></wbr>ControlNativeWindow.WndProc(<wbr></wbr>Message& m)

   at System.Windows.Forms.<wbr></wbr>NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


 


.


 ---------------------------------------------------------------------------------------------------------


 


 


DrawTruck(m_Metrics.Table.Rows<i>);</i>


map1.RefreshDynamic


----------------------------------


 


 


DrawTruck(m_Metrics.Table.Rows<i>);</i>


map1.RefreshDynamic();    // error happens here or shortky aftermic();    // error happens here or shortky after


        private void DrawTruck(DataRow p_row)

        {

            try

            {

                string l_shapeName = "";


                if (p_row == null)

                    return;


                string l_truck = p_row["VehicleId"].ToString();

                DataTable l_truckTable = p_row.Table.Clone();

                l_truckTable.Rows.Add(p_row.ItemArray);

                p_row = l_truckTable.Rows[0];


                if ((p_row["Latitude"].ToString() == "") ||

                    (p_row["Longitude"].ToString() == "") ||

                    (p_row["Latitude"].ToString() == "0") ||

                    (p_row["Longitude"].ToString() == "0"))

                {

                    // log error

                    return;

                }


                PointSymbol TruckPointSymbol = new PointSymbol(PointStyleEnum.BitMap);

                PointShape TruckPointShape = new PointShape();

                LocationXY l_locXY = new LocationXY(0, 0);

                l_locXY = m_coordConvert.FromLatLong(l_locXY);

                MapSuite.Geometry.PointR l_loc = new PointR(l_locXY.X, l_locXY.Y);

                l_shapeName = p_row["VehicleId"].ToString() + "Icon";

                if (myForm.map1.MapShapes[l_shapeName] == null)

                {

                    PointMapShape TruckMapShape = new PointMapShape();

                    TruckMapShape.BaseShape = TruckPointShape;

                    TruckMapShape.ThresholdUnit = ThresholdUnits.kilometres;

                    Threshold TruckThreshold = new Threshold(100000, 0);

                    //Build up the Text Symbol for the Truck Label

                    TextSymbol TruckLabelTextSymbol = new TextSymbol(new Font("Arial", 8, FontStyle.Bold), new SolidBrush(Color.Black));

                    TruckLabelTextSymbol.HasMask = true;

                    TruckLabelTextSymbol.Mask.Pen = new Pen(Color.Black, 2);

                    TruckLabelTextSymbol.XOffset = -10;

                    TruckLabelTextSymbol.YOffset = -20;


                    //Create a Label Renderer that will Label the Truck based upon the Name and Speed columns in the Datatable 

                    LabelRenderer TruckLabelRenderer = new LabelRenderer();

                    TruckLabelRenderer.TextFieldName = "[VehicleId]";

                    TruckLabelRenderer.Symbols.Add(TruckLabelTextSymbol);

                    TruckThreshold.LabelRenderers.Add(TruckLabelRenderer);

                    TruckThreshold.SymbolRenderers.Add(new SymbolRenderer(TruckPointSymbol));

                    TruckMapShape.Thresholds.Add(TruckThreshold);

                    myForm.map1.MapShapes.Add(l_shapeName, TruckMapShape);

                }

                else

                {

                    SymbolRenderer MySymbolRenderer = (SymbolRenderer)myForm.map1.MapShapes[l_shapeName].Thresholds[0].SymbolRenderers[0];

                    TruckPointSymbol = (PointSymbol)MySymbolRenderer.Symbols[0];

                    TruckPointShape = (PointShape)myForm.map1.MapShapes[l_shapeName].BaseShape;

                }

                myForm.map1.MapShapes[l_shapeName].DataTable = l_truckTable;

                TruckPointSymbol.BitMap = (new Bitmap(@".\Truck1.gif"));

                if (Convert.ToDouble(p_row["Latitude"].ToString()) != 0 & Convert.ToDouble(p_row["Longitude"].ToString()) != 0)

                {

                    l_locXY = new LocationXY(double.Parse(p_row["Latitude"].ToString()) + myForm.config.Main[0].LatitudeComp, double.Parse(p_row["Longitude"].ToString()) + myForm.config.Main[0].LongitudeComp);

                    l_locXY = m_coordConvert.FromLatLong(l_locXY);

                    l_loc = new PointR(l_locXY.X, l_locXY.Y);

                    TruckPointShape.X = l_loc.X;  // Set X value of truck

                    TruckPointShape.Y = l_loc.Y;  // Set Y value of truck

                }

            }

            catch (Exception Ow)

            {

// log error            }

        }

 


 


 


Any ideas or any advise on debugging this further. I have a suspicion that it could be due to a lock on the gif but am not sure.


Thanks in advance,


Liam


 


 


 



Liam, 
  
 I did some investigaion on the exception trace, hope it can give you some hints. 
  
 1)Just make sure did you hook up the event for the AfterMapDraw? I guess not. 
 AfterMapDraw(g) 
  
 2) Just make sure you did not track any shape when this exception is happening? I guess not. 
  
 3) The exception is thrown by the following function: 
 PointSymbol.Draw(g, ExactPoint) 
  
 So, I agree with you that it is probablly multiple point symbols sharing the same image cause this problem. So could you have a try by clone the bitmap instead of assign it directly to see if this problem is still there? 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


Hi Yale,


Thanks for that. I had a Clear statement before running the code above and I forgot to include that with the code sample.


I have added the gif file as a resource instead and am currently running tests.


[The failure went from 1 in 5  this morning to 1 in 50 so its difficult to know when its actually fixed]


I will keep you posted.


Liam



Liam, 
  
 Sorry for the delay. Just let you know that I am still keeping an eye on this issue, I will try to recreate the problem as soon as possible. I will get back to you if I find anythig.  
  
 Thanks.  
  
 James

Hi James,


No worries, the response is fine.


I have a test set up where by the map is refreshed every 20 seconds [displaying 3-4 bitmaps of the same icon from the resource file] and this has been running for 3 - 4 hours so far but I will wait untill the morning before I can assume that its ok on that PC


I will then deploy to other PCs before considering the issue resolved for now.


If you find anything mad in the meantime with creating bitmaps from gifs in the file system as opposed to a loaded object from a resource then it would be good to hear about that. The systems that we had problems on were across the following platfoms XP, Vista and Server 2008.


Rgds,


Liam



Liam, 
  
 I can feel the pain to dig the problem for its uncertain and randomness.  We will keep an eye on this issue and welcome your feedback and discussion if you get any results from your tests. 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


Liam,


I found the function which throw exception accroding to stack trace you provided, it seems only Graphics which pass in could be null and throw "Object reference not set to an instance of an object" exception. But I still don't find the reason to fix your problem.


I will keep posting if I found something, and please look at the attachement, if you have any idea please let me know.


Thanks


James



function.cs (11.9 KB)

Hi James,


Thanks for the update but there seems to be a problem withthe attachment. I cannot open or save it [IE8].


We ran the test over 15 hours and it passed on one of the PCs. [Having moved the image from the file system and into an embedded resource]


We are deploying to more clients tomorrow and should know then.


Rgds,


Liam



Liam,


I pack it to .zip file, I think now it will work for you.


Thanks


James



function.zip (1.94 KB)

Hi James,


Thanks for that. I can now open it.


The issue seems to have settles down somewhat since we moved the image to a resource file but in the event that it comes up again I will let you know and review the attachment further.


I'm on annual leave for a few weeks and will update you on my return if this issues arises again


Thanks,


Liam


 


 



Liam, 
  
 Thanks for you mention that. 
  
 Just let me know when you back. 
  
 James