From d8c7bd9d02036897831d1a43ca722ad0fd5f208c Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Wed, 9 Sep 2026 13:55:31 +0800 Subject: [PATCH] Bug fix https://github.com/2dust/v2rayN/issues/10107 --- .../ViewModels/MainWindowViewModel.cs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs b/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs index 27aff8e0..9b95043d 100644 --- a/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs @@ -269,7 +269,7 @@ public partial class MainWindowViewModel : MyReactiveObject ProfilesViewModel.RefreshServersRequested .AsObservable() .ObserveOn(RxSchedulers.MainThreadScheduler) - .SubscribeAsync(async _ => await RefreshServers()); + .SubscribeAsync(async _ => await RefreshServersDispatcherAsync()); var vmReloadRequestedList = new List> { @@ -400,6 +400,8 @@ public partial class MainWindowViewModel : MyReactiveObject #region Servers && Groups + private readonly SemaphoreSlim _refreshServersSemaphore = new(1, 1); + private async Task RefreshServers() { await ProfilesViewModel.RefreshServersBiz(); @@ -411,13 +413,21 @@ public partial class MainWindowViewModel : MyReactiveObject private async Task RefreshServersDispatcherAsync() { //await Observable.Start(async () => await RefreshServers(), RxSchedulers.MainThreadScheduler); - await Signal.FromAsync(async () => + await _refreshServersSemaphore.WaitAsync(); + try + { + await Signal.FromAsync(async () => { await RefreshServers(); return RxVoid.Default; }) - .SubscribeOn(RxSchedulers.MainThreadScheduler) - .ToTask(); + .SubscribeOn(RxSchedulers.MainThreadScheduler) + .ToTask(); + } + finally + { + _refreshServersSemaphore.Release(); + } } private async Task RefreshSubscriptions()