public async Task SetTimeRange(long fromNum, long toNum)
        {
            var script = $@"
TradingVueObj.setRange({fromNum},{toNum});
";
            await XWV.ExJs <object>(script);
        }
 public void Dispose()
 {
     if (IsDisposed)
     {
         return;
     }
     XWV.Dispose();
     IsDisposed = true;
 }
        async Task LoadPage()
        {
            var path = System.IO.Path.Combine(
                AppDomain.CurrentDomain.BaseDirectory,
                UnpackedToPath + "/dist/index.html"
                );
            await XWV.LoadUrl(path);

            await XWV.AttachBridge();
        }
        public async Task <(DateTime StartTime, DateTime EndTime)> GetTimeRange()
        {
            var script = $@"
return TradingVueObj.getRange();
";
            var arr    = await XWV.ExJs <double[]>(script);

            var startDT = TimeExtensions.FromUniversalDateTime(arr[0]);
            var endDT   = TimeExtensions.FromUniversalDateTime(arr[1]);

            return(startDT, endDT);
        }
        async Task LoadPageIfNotLoaded()
        {
            var isLoadedScript = @"
if(window['TradingViewContext'])
  return true;
return false;
";
            var loaded         = await XWV.ExJs <bool>(isLoadedScript);

            if (loaded)
            {
                return;
            }
            await LoadPage();
        }
        public async Task RefreshAsync(ViewRefreshType viewRefreshType = ViewRefreshType.NotReloadIfCached)
        {
            await OnRefreshing(this, viewRefreshType);

            var    ctx       = XWV.ThreadSync.Invoke(() => TypedContext);
            string ctxJson   = null;
            var    chartJson = JsonConvert.SerializeObject(ctx.Chart);
            var    titleJson = JsonConvert.SerializeObject(ctx.Title);
            var    colors    = JsonConvert.SerializeObject(ctx.Colors);

            if (viewRefreshType == ViewRefreshType.NotReloadIfCached)
            {
                ctxJson = JsonConvert.SerializeObject(ctx);
                if (ctxJson == _previousRefreshJson)
                {
                    return;
                }
            }

            var script = $@"
TradingVueObj.titleTxt = {titleJson} ;
TradingViewContext.chart = {chartJson} ;
TradingViewContext.colors = {colors} ;
";
            await XWV.WaitInitialization();

            if (viewRefreshType == ViewRefreshType.ReloadAllPage)
            {
                await LoadPage();
            }
            else
            {
                await LoadPageIfNotLoaded();
            }
            await XWV.ExJs <object>(script);

            _previousRefreshJson = ctxJson;
            await OnRefreshed(this, viewRefreshType);
        }