From 24fd562475cc344ea999e9f1647078800a43da45 Mon Sep 17 00:00:00 2001 From: RMBGAME Date: Thu, 23 Jun 2022 13:56:20 +0800 Subject: [PATCH] Fix --- .../CommunityProxy/ProxyChartView.axaml.cs | 27 ++++++++++++++----- src/ST.Client/Services/IViewModelManager.cs | 1 + .../Implementation/ViewModelManager.cs | 2 +- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Pages/CommunityProxy/ProxyChartView.axaml.cs b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Pages/CommunityProxy/ProxyChartView.axaml.cs index e4c0f47c9..6a2341867 100644 --- a/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Pages/CommunityProxy/ProxyChartView.axaml.cs +++ b/src/ST.Client.Desktop.Avalonia/Application/UI/Views/Pages/CommunityProxy/ProxyChartView.axaml.cs @@ -1,13 +1,16 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; +using DynamicData.Binding; using LiveChartsCore; using LiveChartsCore.SkiaSharpView; using LiveChartsCore.SkiaSharpView.Avalonia; +using ReactiveUI; using System.Application.Models; using System.Application.Services; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; namespace System.Application.UI.Views.Pages @@ -69,7 +72,21 @@ namespace System.Application.UI.Views.Pages chart.YAxes = new Axis[] { new Axis { Labeler = YFormatter, MinLimit = 0 } }; } - FlushFlowChartAsync(); + var cancellation = new CancellationTokenSource(); + + ProxyService.Current.WhenValueChanged(x => x.ProxyStatus, false) + .Subscribe(x => + { + if (x) + { + cancellation.TryReset(); + FlushFlowChartAsync(cancellation.Token); + } + else + { + cancellation.Cancel(); + } + }); } private void InitializeComponent() @@ -92,15 +109,13 @@ namespace System.Application.UI.Views.Pages } } - private async void FlushFlowChartAsync() + private async void FlushFlowChartAsync(CancellationToken token) { - while (true) + while (!token.IsCancellationRequested) { try { - if (!ProxyService.Current.ProxyStatus) continue; - - var flowStatistics = await IHttpService.Instance.GetAsync("https://localhost/flowStatistics"); + var flowStatistics = await IHttpService.Instance.GetAsync("https://localhost/flowStatistics", cancellationToken: token); if (flowStatistics == null) { continue; diff --git a/src/ST.Client/Services/IViewModelManager.cs b/src/ST.Client/Services/IViewModelManager.cs index e48739c7e..d2e0cce3e 100644 --- a/src/ST.Client/Services/IViewModelManager.cs +++ b/src/ST.Client/Services/IViewModelManager.cs @@ -28,6 +28,7 @@ namespace System.Application.Services void InitCloudManageMain(int appid); void InitTaskBarWindowViewModel(); + void DispoeTaskBarWindowViewModel(); /// diff --git a/src/ST.Client/Services/Implementation/ViewModelManager.cs b/src/ST.Client/Services/Implementation/ViewModelManager.cs index d4d7d2f61..80af9aab8 100644 --- a/src/ST.Client/Services/Implementation/ViewModelManager.cs +++ b/src/ST.Client/Services/Implementation/ViewModelManager.cs @@ -91,7 +91,7 @@ namespace System.Application.Services.Implementation { try { - if (OperatingSystem2.IsWindows() && StartupOptions.Value.HasNotifyIcon && taskbarWindow == null) + if (OperatingSystem2.IsWindows() && StartupOptions.Value.HasNotifyIcon && taskbarWindow == null && mMainWindow != null) { taskbarWindow = new TaskBarWindowViewModel(mMainWindow); }