ThinkGeo.com    |     Documentation    |     Premium Support

Map flickers when refreshing specific overlay

Hello,

when I refresh an overlay (while at least one other overlay is existing) in multi-thread mode, the refreshed overlay disappears for some milliseconds and then reappears, which is quite disturbing for frequent refreshs.

Can I do anything against this flickering?



I attached an example solution where the problem occurs. Please adapt the referenced ThinkGeo DLL paths, start the solution and click the button to see the refresh.


Thanks,

Marko



SampleApplication.zip (13.3 KB)

Hi Marko, 
  
 Thanks for your sample it helped so much. The issue is proved to be a bug which has fixed in the v9.0.202.0 or later which can be downloaded from Product Center. 
  
 Thanks, 
 Peter

Thank you very much for the quick bugfix, this helped a lot!

Hi Marko, 
  
 We are glad to hear that works. 
  
 Regards, 
  
 Don

Hello,



I’m afraid to issue another related bug:

When refreshing two overlays, the flickering still occurs.



In the attached SampleApplication, click the second button (“Refresh 3rd and 2nd overlay”) to see the problem.



Is it possible to fix this, too?



Thanks,

Marko

001_SampleApplication.zip (23.2 KB)

Hi Marko, 



The reason for this is that the map refresh twice in sample code: 




this.winformsMap1.Refresh(this.thirdOverlay); 
this.winformsMap1.Refresh(this.pointOverlay);



Please try using the override method this.winformsMap1.Refresh(params[] overlays) instead: 


this.winformsMap1.Refresh(new[] { this.thirdOverlay, this.pointOverlay });



Thanks, 

Peter

Hi Peter, 
  
 the problem in our main application is that the two Refresh operations are triggered from different events - one is triggered from the OnClick event and the other is triggered from the OnMouseMove event. Unfortunately, in case of a click, both events seem to be fired which causes both overlays to be refreshed in different method calls, so it is not possible to merge both calls into one as you suggested. 
  
 I also tried locking the two operations, but without success. Do you have another idea how to cope with this? 
  
 Thanks, 
 Marko

Hi Marko,



Please try the following code to prevent the both events firing:




void InitializeTimer()
{
   freezenTimer = new Timer();
    freezenTimer.Interval = 10; //set an appropriate value here. 
    freezenTimer.Tick += (sender, e) => { isFreezen = false; freezenTimer.Enabled = false; };
}
 
void winformsMap1_MouseUp(object sender, MouseEventArgs e)
{
      isFreezen = true;
       freezenTimer.Enabled = true;
}
 
void winformsMap1_MapClick(object sender, MapClickWinformsMapEventArgs e)
{
     // refresh one overlay
}
 
private void winformsMap1_MouseMove(object sender, MouseEventArgs e)
{
    if (!isFreezen)
    {
       // refresh the other overlay here.
     }
}



Hope it’s helped.



Thanks,

Peter