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()