Rambla.Avalonia
0.6.0
dotnet add package Rambla.Avalonia --version 0.6.0
NuGet\Install-Package Rambla.Avalonia -Version 0.6.0
<PackageReference Include="Rambla.Avalonia" Version="0.6.0" />
<PackageVersion Include="Rambla.Avalonia" Version="0.6.0" />
<PackageReference Include="Rambla.Avalonia" />
paket add Rambla.Avalonia --version 0.6.0
#r "nuget: Rambla.Avalonia, 0.6.0"
#:package Rambla.Avalonia@0.6.0
#addin nuget:?package=Rambla.Avalonia&version=0.6.0
#tool nuget:?package=Rambla.Avalonia&version=0.6.0
Rambla.Avalonia
Avalonia dispatcher adapter for Rambla — high-frequency observable state for real-time .NET desktop apps.
Rambla's core is framework-agnostic and never references a dispatcher. This
package supplies the IStateScheduler that marshals coalesced state flushes onto
the Avalonia UI thread, at Background priority so high-frequency state never
starves input or rendering.
Built against Avalonia 11.0 — the minimum it supports. Apps on 11.x and 12.x
both work: the IDispatcher surface this adapter uses is unchanged across them.
Usage
Install both packages, then install the scheduler once at startup:
using Rambla.Avalonia;
public override void OnFrameworkInitializationCompleted()
{
// Every RamblaState created without an explicit scheduler now flushes
// onto the Avalonia UI thread.
DispatcherStateScheduler.InstallAsDefault();
base.OnFrameworkInitializationCompleted();
}
Your RamblaState-derived view models then update from any thread and bind
exactly like any INotifyPropertyChanged object — Rambla coalesces the
background writes into a few UI notifications per second.
Capping the refresh rate
InstallAsDefault posts a flush as fast as the dispatcher drains its queue. To
bound it, install the throttled variant instead — it wraps the adapter in the
core's ThrottlingStateScheduler:
// 60 flushes/second at most; omit the argument to use RamblaOptions.MaxRefreshRate.
_scheduler = DispatcherStateScheduler.InstallThrottledAsDefault(60);
It owns a timer, so keep the returned instance and dispose it on exit (after the background writers stop).
Testing
The adapter takes an IDispatcher, not the concrete Dispatcher, so a test can
substitute a fake and assert what reached the UI without a live UI thread.
Links
- Repository & docs: https://github.com/nicoseijas/Rambla
- Getting started: https://github.com/nicoseijas/Rambla/wiki/Getting-Started
- Frozen V1 semantics: https://github.com/nicoseijas/Rambla/blob/main/SEMANTICS.md
Released under the MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.