diff --git a/v2rayN/Directory.Packages.props b/v2rayN/Directory.Packages.props
index 0921f480..839b3384 100644
--- a/v2rayN/Directory.Packages.props
+++ b/v2rayN/Directory.Packages.props
@@ -9,18 +9,18 @@
-
+
-
+
-
+
-
+
-
+
diff --git a/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs b/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs
index 7bcb36ea..dc31b41b 100644
--- a/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs
+++ b/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs
@@ -204,7 +204,7 @@ public class CheckUpdateViewModel : MyReactiveObject
private async Task UpdateFinishedSub(bool blReload)
{
- RxApp.MainThreadScheduler.Schedule(blReload, (scheduler, blReload) =>
+ RxSchedulers.MainThreadScheduler.Schedule(blReload, (scheduler, blReload) =>
{
_ = UpdateFinishedResult(blReload);
return Disposable.Empty;
@@ -317,7 +317,7 @@ public class CheckUpdateViewModel : MyReactiveObject
Remarks = msg,
};
- RxApp.MainThreadScheduler.Schedule(item, (scheduler, model) =>
+ RxSchedulers.MainThreadScheduler.Schedule(item, (scheduler, model) =>
{
_ = UpdateViewResult(model);
return Disposable.Empty;
diff --git a/v2rayN/ServiceLib/ViewModels/ClashConnectionsViewModel.cs b/v2rayN/ServiceLib/ViewModels/ClashConnectionsViewModel.cs
index 48500f3e..07de23f2 100644
--- a/v2rayN/ServiceLib/ViewModels/ClashConnectionsViewModel.cs
+++ b/v2rayN/ServiceLib/ViewModels/ClashConnectionsViewModel.cs
@@ -56,7 +56,7 @@ public class ClashConnectionsViewModel : MyReactiveObject
return;
}
- RxApp.MainThreadScheduler.Schedule(ret?.connections, (scheduler, model) =>
+ RxSchedulers.MainThreadScheduler.Schedule(ret?.connections, (scheduler, model) =>
{
_ = RefreshConnections(model);
return Disposable.Empty;
diff --git a/v2rayN/ServiceLib/ViewModels/ClashProxiesViewModel.cs b/v2rayN/ServiceLib/ViewModels/ClashProxiesViewModel.cs
index 6628e11d..6220719b 100644
--- a/v2rayN/ServiceLib/ViewModels/ClashProxiesViewModel.cs
+++ b/v2rayN/ServiceLib/ViewModels/ClashProxiesViewModel.cs
@@ -90,7 +90,7 @@ public class ClashProxiesViewModel : MyReactiveObject
AppEvents.ProxiesReloadRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async _ => await ProxiesReload());
#endregion AppEvents
@@ -173,7 +173,7 @@ public class ClashProxiesViewModel : MyReactiveObject
if (refreshUI)
{
- RxApp.MainThreadScheduler.Schedule(() => _ = RefreshProxyGroups());
+ RxSchedulers.MainThreadScheduler.Schedule(() => _ = RefreshProxyGroups());
}
}
@@ -387,7 +387,7 @@ public class ClashProxiesViewModel : MyReactiveObject
}
var model = new SpeedTestResult() { IndexId = item.Name, Delay = result };
- RxApp.MainThreadScheduler.Schedule(model, (scheduler, model) =>
+ RxSchedulers.MainThreadScheduler.Schedule(model, (scheduler, model) =>
{
_ = ProxiesDelayTestResult(model);
return Disposable.Empty;
diff --git a/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs b/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs
index 0bd0c588..ee92a0cd 100644
--- a/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs
+++ b/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs
@@ -228,22 +228,22 @@ public class MainWindowViewModel : MyReactiveObject
AppEvents.ReloadRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async _ => await Reload());
AppEvents.AddServerViaScanRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async _ => await AddServerViaScanAsync());
AppEvents.AddServerViaClipboardRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async _ => await AddServerViaClipboardAsync(null));
AppEvents.SubscriptionsUpdateRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async blProxy => await UpdateSubscriptionProcess("", blProxy));
#endregion AppEvents
@@ -583,7 +583,7 @@ public class MainWindowViewModel : MyReactiveObject
private void ReloadResult(bool showClashUI)
{
- RxApp.MainThreadScheduler.Schedule(() =>
+ RxSchedulers.MainThreadScheduler.Schedule(() =>
{
ShowClashUI = showClashUI;
TabMainSelectedIndex = showClashUI ? TabMainSelectedIndex : 0;
@@ -592,7 +592,7 @@ public class MainWindowViewModel : MyReactiveObject
private void SetReloadEnabled(bool enabled)
{
- RxApp.MainThreadScheduler.Schedule(() => BlReloadEnabled = enabled);
+ RxSchedulers.MainThreadScheduler.Schedule(() => BlReloadEnabled = enabled);
}
private async Task LoadCore(CoreConfigContext? mainContext, CoreConfigContext? preContext)
diff --git a/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs b/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs
index 68bf71b5..06657a93 100644
--- a/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs
+++ b/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs
@@ -31,7 +31,7 @@ public class MsgViewModel : MyReactiveObject
AppEvents.SendMsgViewRequested
.AsObservable()
- //.ObserveOn(RxApp.MainThreadScheduler)
+ //.ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(content => _ = AppendQueueMsg(content));
}
diff --git a/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs b/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs
index edeec49e..7700d416 100644
--- a/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs
+++ b/v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs
@@ -228,22 +228,22 @@ public class ProfilesViewModel : MyReactiveObject
AppEvents.ProfilesRefreshRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async _ => await RefreshServersBiz());
AppEvents.SubscriptionsRefreshRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async _ => await RefreshSubscriptions());
AppEvents.DispatcherStatisticsRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async result => await UpdateStatistics(result));
AppEvents.SetDefaultServerRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async indexId => await SetDefaultServer(indexId));
#endregion AppEvents
@@ -732,7 +732,7 @@ public class ProfilesViewModel : MyReactiveObject
_speedtestService ??= new SpeedtestService(_config, async (SpeedTestResult result) =>
{
- RxApp.MainThreadScheduler.Schedule(result, (scheduler, result) =>
+ RxSchedulers.MainThreadScheduler.Schedule(result, (scheduler, result) =>
{
_ = SetSpeedTestResult(result);
return Disposable.Empty;
diff --git a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs
index 9269851d..b8154c16 100644
--- a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs
+++ b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs
@@ -200,27 +200,27 @@ public class StatusBarViewModel : MyReactiveObject
AppEvents.DispatcherStatisticsRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async result => await UpdateStatistics(result));
AppEvents.RoutingsMenuRefreshRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async _ => await RefreshRoutingsMenu());
AppEvents.TestServerRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async _ => await TestServerAvailability());
AppEvents.InboundDisplayRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async _ => await InboundDisplayStatus());
AppEvents.SysProxyChangeRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async result => await SetListenerType(result));
#endregion AppEvents
@@ -243,7 +243,7 @@ public class StatusBarViewModel : MyReactiveObject
{
AppEvents.ProfilesRefreshRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async _ => await RefreshServersBiz()); //.DisposeWith(_disposables);
}
}
@@ -362,7 +362,7 @@ public class StatusBarViewModel : MyReactiveObject
private async Task TestServerAvailabilitySub(string msg)
{
- RxApp.MainThreadScheduler.Schedule(msg, (scheduler, msg) =>
+ RxSchedulers.MainThreadScheduler.Schedule(msg, (scheduler, msg) =>
{
_ = TestServerAvailabilityResult(msg);
return Disposable.Empty;
diff --git a/v2rayN/v2rayN.Desktop/Program.cs b/v2rayN/v2rayN.Desktop/Program.cs
index 70c43130..0ad036ec 100644
--- a/v2rayN/v2rayN.Desktop/Program.cs
+++ b/v2rayN/v2rayN.Desktop/Program.cs
@@ -59,7 +59,7 @@ internal class Program
//.WithInterFont()
.WithFontByDefault()
.LogToTrace()
- .UseReactiveUI();
+ .UseReactiveUI(_ => { });
if (OperatingSystem.IsMacOS())
{
diff --git a/v2rayN/v2rayN.Desktop/Views/ClashConnectionsView.axaml.cs b/v2rayN/v2rayN.Desktop/Views/ClashConnectionsView.axaml.cs
index 4bf5237b..90690c1e 100644
--- a/v2rayN/v2rayN.Desktop/Views/ClashConnectionsView.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/ClashConnectionsView.axaml.cs
@@ -28,7 +28,7 @@ public partial class ClashConnectionsView : ReactiveUserControl StorageUI())
.DisposeWith(disposables);
});
diff --git a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs
index 5c5ba9cb..7e96fad2 100644
--- a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs
@@ -128,25 +128,25 @@ public partial class MainWindow : WindowBase
AppEvents.SendSnackMsgRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async content => await DelegateSnackMsg(content))
.DisposeWith(disposables);
AppEvents.AppExitRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(_ => StorageUI())
.DisposeWith(disposables);
AppEvents.ShutdownRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(content => Shutdown(content))
.DisposeWith(disposables);
AppEvents.ShowHideWindowRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(blShow => ShowHideWindow(blShow))
.DisposeWith(disposables);
});
diff --git a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs
index 40336be5..7d803f10 100644
--- a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml.cs
@@ -90,13 +90,13 @@ public partial class ProfilesView : ReactiveUserControl
AppEvents.AppExitRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(_ => StorageUI())
.DisposeWith(disposables);
AppEvents.AdjustMainLvColWidthRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(_ => AutofitColumnWidth())
.DisposeWith(disposables);
});
diff --git a/v2rayN/v2rayN/App.xaml.cs b/v2rayN/v2rayN/App.xaml.cs
index ca56311b..3c5f1989 100644
--- a/v2rayN/v2rayN/App.xaml.cs
+++ b/v2rayN/v2rayN/App.xaml.cs
@@ -39,6 +39,11 @@ public partial class App : Application
}
AppManager.Instance.InitComponents();
+
+ RxAppBuilder.CreateReactiveUIBuilder()
+ .WithWpf()
+ .BuildApp();
+
base.OnStartup(e);
}
diff --git a/v2rayN/v2rayN/GlobalUsings.cs b/v2rayN/v2rayN/GlobalUsings.cs
index 1f2d1936..fb63f7eb 100644
--- a/v2rayN/v2rayN/GlobalUsings.cs
+++ b/v2rayN/v2rayN/GlobalUsings.cs
@@ -20,6 +20,7 @@ global using System.Windows.Threading;
global using DynamicData;
global using DynamicData.Binding;
global using ReactiveUI;
+global using ReactiveUI.Builder;
global using ReactiveUI.Fody.Helpers;
global using ServiceLib;
global using ServiceLib.Base;
diff --git a/v2rayN/v2rayN/Views/ClashConnectionsView.xaml.cs b/v2rayN/v2rayN/Views/ClashConnectionsView.xaml.cs
index 47482b8e..337b38e4 100644
--- a/v2rayN/v2rayN/Views/ClashConnectionsView.xaml.cs
+++ b/v2rayN/v2rayN/Views/ClashConnectionsView.xaml.cs
@@ -33,7 +33,7 @@ public partial class ClashConnectionsView
AppEvents.AppExitRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(_ => StorageUI())
.DisposeWith(disposables);
});
diff --git a/v2rayN/v2rayN/Views/MainWindow.xaml.cs b/v2rayN/v2rayN/Views/MainWindow.xaml.cs
index 93e62aad..42d8aabc 100644
--- a/v2rayN/v2rayN/Views/MainWindow.xaml.cs
+++ b/v2rayN/v2rayN/Views/MainWindow.xaml.cs
@@ -127,25 +127,25 @@ public partial class MainWindow
AppEvents.SendSnackMsgRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(async content => await DelegateSnackMsg(content))
.DisposeWith(disposables);
AppEvents.AppExitRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(_ => StorageUI())
.DisposeWith(disposables);
AppEvents.ShutdownRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(content => Shutdown(content))
.DisposeWith(disposables);
AppEvents.ShowHideWindowRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(blShow => ShowHideWindow(blShow))
.DisposeWith(disposables);
});
diff --git a/v2rayN/v2rayN/Views/ProfilesView.xaml.cs b/v2rayN/v2rayN/Views/ProfilesView.xaml.cs
index b088fe7b..7075d358 100644
--- a/v2rayN/v2rayN/Views/ProfilesView.xaml.cs
+++ b/v2rayN/v2rayN/Views/ProfilesView.xaml.cs
@@ -84,13 +84,13 @@ public partial class ProfilesView
AppEvents.AppExitRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(_ => StorageUI())
.DisposeWith(disposables);
AppEvents.AdjustMainLvColWidthRequested
.AsObservable()
- .ObserveOn(RxApp.MainThreadScheduler)
+ .ObserveOn(RxSchedulers.MainThreadScheduler)
.Subscribe(_ => AutofitColumnWidth())
.DisposeWith(disposables);
});
diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj
index 9654625d..45cbc376 100644
--- a/v2rayN/v2rayN/v2rayN.csproj
+++ b/v2rayN/v2rayN/v2rayN.csproj
@@ -2,7 +2,7 @@
WinExe
- net8.0-windows10.0.17763
+ net8.0-windows10.0.19041.0
true
true
Resources\v2rayN.ico