I’m building a line chart control in Silverlight using PolyLineSegment and points. It works just as expected, but the application freezes for a long time when there’s too much data that needs to be visualized (too many points). I can’t move my code on a separate thread for an obvious reason – it deals with UI elements directly, so when I try to call them from a separate thread it results in exception (even if UI elements are not yet rendered).
Is there any way to create UI elements dynamically on a background thread and then pass them to the UI thread to be rendered? And if not, what would be the possible solution? I’m thinking of creating an Bitmap image instead of actual controls, but there won’t be much interactivity in this case.
It sounds like you need to get a faster way of rendering your points. If you have 800k samples and only say, 800 pixels to display them in you’re wasting 1000 points per pixel of calculations if you just load it into a
PolyLineSegment.I would revisit ‘interpolating’ the points (this is really coalescing for your large dataset). You want to make sure you capture the dynamic range of the function in each pixel correctly:
If your points/pixel gets close to 1 you’ll want to switch to the easy rendering to give better visual results as well.