Search Results for

    Show / Hide Table of Contents

    Suspending Updates of Chart

    When performing multiple updates, such as VisibleRange changes, DataSeries changes and RenderableSeries or Axis property changes, each change can potentially trigger a redraw in SciChart. To prevent this and combine several updates into one, use the methods from the ISuspendable implementation on SciChartSurface or use UpdateSuspender.using() helper method which accepts ISuspendable which should be suspended and Runnable which should be executed while ISuspendable is suspended.

    • Java
    • Java with Builders API
    • Kotlin
    // use try-with-resources statement
    try(IUpdateSuspender suspender = surface.suspendUpdates()){
        dataSeries.append(x1, y1);
        dataSeries.append(x2, y2);
        dataSeries.append(x3, y4);
        Collections.addAll(surface.getXAxes(), xAxis);
        Collections.addAll(surface.getYAxes(), yAxis);
        Collections.addAll(surface.getRenderableSeries(), rSeries);
    } catch (Exception e) {
    
    }
    
    //or use UpdateSuspender.using() which does the same thing
    UpdateSuspender.using(surface, new Runnable() {
        @Override
        public void run() {
            dataSeries.append(x1, y1);
            dataSeries.append(x2, y2);
            dataSeries.append(x3, y4);
            Collections.addAll(surface.getXAxes(), xAxis);
            Collections.addAll(surface.getYAxes(), yAxis);
            Collections.addAll(surface.getRenderableSeries(), rSeries);
        }
    });
    
    // use try-with-resources statement
    try (IUpdateSuspender suspender = surface.suspendUpdates()) {
        dataSeries.append(x1, y1);
        dataSeries.append(x2, y2);
        dataSeries.append(x3, y4);
        Collections.addAll(surface.getXAxes(), xAxis);
        Collections.addAll(surface.getYAxes(), yAxis);
        Collections.addAll(surface.getRenderableSeries(), rSeries);
    } catch (Exception e) {
    
    }
    
    //or use UpdateSuspender.using() which does the same thing
    UpdateSuspender.using(surface, new Runnable() {
        @Override
        public void run() {
            dataSeries.append(x1, y1);
            dataSeries.append(x2, y2);
            dataSeries.append(x3, y4);
            Collections.addAll(surface.getXAxes(), xAxis);
            Collections.addAll(surface.getYAxes(), yAxis);
            Collections.addAll(surface.getRenderableSeries(), rSeries);
        }
    });
    
    // use try-with-resources statement
    try {
        surface.suspendUpdates().use { suspender ->
            dataSeries.append(x1, y1)
            dataSeries.append(x2, y2)
            dataSeries.append(x3, y4)
            Collections.addAll(surface.xAxes, xAxis)
            Collections.addAll(surface.yAxes, yAxis)
            Collections.addAll(surface.renderableSeries, rSeries)
        }
    } catch (e: Exception) {
    }
    
    //or use UpdateSuspender.using() which does the same thing
    UpdateSuspender.using(surface) {
        dataSeries.append(x1, y1)
        dataSeries.append(x2, y2)
        dataSeries.append(x3, y4)
        Collections.addAll(surface.xAxes, xAxis)
        Collections.addAll(surface.yAxes, yAxis)
        Collections.addAll(surface.renderableSeries, rSeries)
    }
    

    Using UpdateSuspender API to avoid problems because of multithreading

    By default SciChartSurface can be used with different IRenderSurface implementations. Some of them create a separate Java Thread for rendering (e.g. RenderSurfaceGL and GLTextureView). This means that chart can be updated from one Thread ( usually from UI Thread ) and rendered on other thread. Potentially this could lead to different problems ( race conditions, deadlocks etc ) when different Threads try to get access to some shared resource ( in our case SciChartSurface or its part). In this case UpdateSuspender API which allows to avoid these kind of problems by telling SciChartSurface or its part that you want to update it.

    Back to top © 2011-2025 SciChart. All rights reserved. | sitemap.xml