Major problem here
We have point clouds of over 1/4 million points and it takes ultrachart over 10 seconds to update the chart sadly (custom fillscenegraph stuff)
The problem is that InvalidateLayers(); returns IMEDIATLY and i have no way to know when you have finished
This behaviour causes users to believe the chart is up to date because my cursor says soAnd they merrily try to do stuff they cant yet.
mainCursor(1): // my routine to show busyUltraChart1->InvalidateLayers();mainCursor(0); // my routine to show not busy
Is there any overrides or dot net tricks to stop after InvalidateLayers() that you can help me with Short of doing Application::DoEvents :¬(
Many thanks
HI Mac,
My guess is that the InvalidateLayers method just invalidates the layers, which is to say it marks the layers as dirty and needing to be updated, but doesn't synchronously perform that refresh. The actual refresh probably occurs the next time the control paints.
So one thing you could do is hook into the Paint event immediately before or after calling InvalidateLayers and presumably the refresh should be complete at the point where Paint fires.
Another option would be to call Update or Refresh on the control. Update will force an invalidating control to paint synchronously. Refresh is a slightly more powerful version, both invalidating and forcing a paint. My guess is that you don't need to invalidate, since the InvalidateLayers probably does that for you, but if Update doesn't work, try Refresh in case I am wrong.
Hi Mike
Thank you for that idea I will try that out tomorrow
Any thing to remove DoEvents is a good thing :¬)
Yeah, I think that's a much cleaner and less dangerous solution. :)
I could not resist checking this out and it worked as you suggested :¬)
ultraChart1->InvalidateLayers();ultraChart1->Update();
I should have thought of this myself
Thank you again :¬)