Method to force a chart update
            
                 15 Feb 2021, 15:33
            
                    
Is there a method to force the update of the chart with text. 
I like to disp a progress indicator but the chart does not (always) react in the chart.drawtext("time "+Server.Time.Ticks)
Questions
1  what triggers a screenupdate in cTrader automate.
2 how can we force a screen update
Best rgds,
Ton
Replies
                     PanagiotisCharalampous
                     16 Feb 2021, 08:15
                                    
Hi Share4us,
You need to do the update asynchronously. The below example might help you.
using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
using cAlgo.Indicators;
using System.Threading.Tasks;
namespace cAlgo
{
    [Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class NewIndicator : Indicator
    {
        protected override void Initialize()
        {
            Task.Factory.StartNew(() => { LongOperationWithProgress(); });
        }
        private void LongOperationWithProgress()
        {
            for (var i = 0; i < 100; i++)
            {
                UpdateProgress(i.ToString() + "%");
                System.Threading.Thread.Sleep(50);
            }
            UpdateProgress("Finished");
        }
        private void UpdateProgress(string message)
        {
            BeginInvokeOnMainThread(() => { Chart.DrawStaticText("progress", message, VerticalAlignment.Top, HorizontalAlignment.Left, Chart.ColorSettings.ForegroundColor); });
        }
        public override void Calculate(int index)
        {
            // Calculate value at specified index
            // Result[index] = ...
        }
    }
}
Best Regards,
Panagiotis
@PanagiotisCharalampous
                     ctid+customer-358356
                     16 Feb 2021, 15:12
                                            ( Updated at: 16 Feb 2021, 15:34 )
                                    
RE:
tried that but gave a  cBot crashed: Error #16302605
funny, restarting the bot does not always give the error |:)  ??
@ctid+customer-358356
                     PanagiotisCharalampous
                     16 Feb 2021, 16:05
                                    
Hi Share4us,
Did you try the example as is or just incorporated in some other code?
Best Regards,
Panagiotis
@PanagiotisCharalampous
                     ctid+customer-358356
                     19 Feb 2021, 01:47
                                    
RE:
BeginInvokeonMainthread still crashes the bot intermediately.
I think there are severe threading designflaws.
for instance in a seperate thread
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
at System.Collections.Generic.List`1.get_Item(Int32 index) at cTrader.Automate.Small.V1.MarketApi.SmallBarsChartSource.cAlgo.API.Bars.get_Item(Int32 index)
on a 
 Bar _lastBar = Bars.LastBar;
That's just not keeping your routines well closed.
 
@ctid+customer-358356
                     PanagiotisCharalampous
                     19 Feb 2021, 07:55
                                    
Hi Share4us,
We cannot reproduce this. Can you please share some source code?
Best Regards,
Panagiotis
@PanagiotisCharalampous

... Deleted by UFO ...