Skip to content

[Bug]: ObjectDisposedException thrown #665

Closed

Description

@xecrets

Describe the bug 🐞

Upgrading from 3.1.7 to 4.0.9, in an app running AvaloniaUI 11.0.10 undesirable new behavior is shown. An ObjectDisposedException is thrown, although apparently caught/ignored/hidden higher up in the call stack, this is still undesirable and constitutes a code smell. Exceptions that can be avoided should be avoided.

Step to reproduce

I don't have a minimum reproduceable sample unfortunately, and the app in question is not open source. Hopefully somebody who knows what has changed and examining the call stack below will recognize the root cause. The change in behavior occurs with no other change than upgrading from 3.1.7 to 4.0.9, and has been re-confirmed by downgrading (no issue) and upgrading again (new behavior is back).

Reproduction repository

No response

Expected behavior

In normal usage, exceptions should not be thrown, and specifically not ObjectDisposedException. Notable also is that it's a changed behavior from 3.1.7 to 4.0.9 .

Full call stack follows:

 	System.Reactive.dll!System.Reactive.Subjects.ReplaySubject<ReactiveUI.Validation.States.IValidationState>.ReplayBase.CheckDisposed() Line 424	C#
 	System.Reactive.dll!System.Reactive.Subjects.ReplaySubject<ReactiveUI.Validation.States.IValidationState>.ReplayBase.Subscribe(System.IObserver<ReactiveUI.Validation.States.IValidationState> observer) Line 373	C#
 	System.Reactive.dll!System.Reactive.Subjects.ReplaySubject<ReactiveUI.Validation.States.IValidationState>.Subscribe(System.IObserver<ReactiveUI.Validation.States.IValidationState> observer) Line 200	C#
 	System.Reactive.dll!System.ObservableExtensions.SubscribeSafe<ReactiveUI.Validation.States.IValidationState>(System.IObservable<ReactiveUI.Validation.States.IValidationState> source, System.IObserver<ReactiveUI.Validation.States.IValidationState> observer) Line 395	C#
 	System.Reactive.dll!System.Reactive.Subjects.ConnectableObservable<ReactiveUI.Validation.States.IValidationState, ReactiveUI.Validation.States.IValidationState>.Subscribe(System.IObserver<ReactiveUI.Validation.States.IValidationState> observer) Line 90	C#
 	System.Reactive.dll!System.ObservableExtensions.SubscribeSafe<ReactiveUI.Validation.States.IValidationState>(System.IObservable<ReactiveUI.Validation.States.IValidationState> source, System.IObserver<ReactiveUI.Validation.States.IValidationState> observer) Line 395	C#
 	System.Reactive.dll!System.Reactive.Sink<ReactiveUI.Validation.States.IValidationState, ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Run(System.IObservable<ReactiveUI.Validation.States.IValidationState> source) Line 89	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.Select<ReactiveUI.Validation.States.IValidationState, ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Selector.Run(System.Reactive.Linq.ObservableImpl.Select<ReactiveUI.Validation.States.IValidationState, ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Selector._ sink) Line 22	C#
 	System.Reactive.dll!System.Reactive.Producer<ReactiveUI.Validation.Components.Abstractions.IValidationComponent, System.Reactive.Linq.ObservableImpl.Select<ReactiveUI.Validation.States.IValidationState, ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Selector._>.SubscribeRaw(System.IObserver<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> observer, bool enableSafeguard) Line 128	C#
 	System.Reactive.dll!System.ObservableExtensions.SubscribeSafe<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>(System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> source, System.IObserver<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> observer) Line 388	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.Merge<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Observables._.OnNext(System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 181	C#
 	System.Reactive.dll!System.Reactive.Sink<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.ForwardOnNext(System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 50	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.ToObservableRecursive<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>._.LoopRec(System.Reactive.Concurrency.IScheduler scheduler) Line 122	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.ToObservableRecursive<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>._.Run.AnonymousMethod__3_0(System.Reactive.Concurrency.IScheduler innerScheduler, System.Reactive.Linq.ObservableImpl.ToObservableRecursive<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>._ this) Line 55	C#
 	System.Reactive.dll!System.Reactive.Concurrency.ImmediateScheduler.Schedule<System.Reactive.Linq.ObservableImpl.ToObservableRecursive<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>._>(System.Reactive.Linq.ObservableImpl.ToObservableRecursive<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>._ state, System.Func<System.Reactive.Concurrency.IScheduler, System.Reactive.Linq.ObservableImpl.ToObservableRecursive<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>._, System.IDisposable> action) Line 41	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.ToObservableRecursive<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>._.Run(System.Collections.Generic.IEnumerable<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>> source, System.Reactive.Concurrency.IScheduler scheduler) Line 56	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.ToObservableRecursive<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.Run(System.Reactive.Linq.ObservableImpl.ToObservableRecursive<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>._ sink) Line 24	C#
 	System.Reactive.dll!System.Reactive.Producer<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>, System.Reactive.Linq.ObservableImpl.ToObservableRecursive<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>._>.SubscribeRaw(System.IObserver<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>> observer, bool enableSafeguard) Line 128	C#
 	System.Reactive.dll!System.ObservableExtensions.SubscribeSafe<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>(System.IObservable<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>> source, System.IObserver<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>> observer) Line 388	C#
 	System.Reactive.dll!System.Reactive.Sink<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>, ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Run(System.IObservable<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>> source) Line 89	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.Merge<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Observables.Run(System.Reactive.Linq.ObservableImpl.Merge<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Observables._ sink) Line 163	C#
 	System.Reactive.dll!System.Reactive.Producer<ReactiveUI.Validation.Components.Abstractions.IValidationComponent, System.Reactive.Linq.ObservableImpl.Merge<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Observables._>.SubscribeRaw(System.IObserver<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> observer, bool enableSafeguard) Line 128	C#
 	System.Reactive.dll!System.ObservableExtensions.SubscribeSafe<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>(System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> source, System.IObserver<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> observer) Line 388	C#
 	System.Reactive.dll!System.Reactive.TailRecursiveSink<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Drain() Line 128	C#
 	System.Reactive.dll!System.Reactive.TailRecursiveSink<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Run(System.Collections.Generic.IEnumerable<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>> sources) Line 35	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.Concat<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Run(System.Reactive.Linq.ObservableImpl.Concat<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>._ sink) Line 20	C#
 	System.Reactive.dll!System.Reactive.Producer<ReactiveUI.Validation.Components.Abstractions.IValidationComponent, System.Reactive.Linq.ObservableImpl.Concat<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>._>.SubscribeRaw(System.IObserver<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> observer, bool enableSafeguard) Line 128	C#
 	System.Reactive.dll!System.ObservableExtensions.SubscribeSafe<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>(System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> source, System.IObserver<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> observer) Line 388	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.Switch<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>._.OnNext(System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 59	C#
 	System.Reactive.dll!System.Reactive.Sink<System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.ForwardOnNext(System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 50	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.Select<System.Collections.Generic.IReadOnlyCollection<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>, System.IObservable<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.Selector._.OnNext(System.Collections.Generic.IReadOnlyCollection<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 48	C#
 	System.Reactive.dll!System.Reactive.Sink<System.Collections.Generic.IReadOnlyCollection<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.ForwardOnNext(System.Collections.Generic.IReadOnlyCollection<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 50	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.Select<System.Collections.Generic.IReadOnlyCollection<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>, System.Collections.Generic.IReadOnlyCollection<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.Selector._.OnNext(System.Collections.Generic.IReadOnlyCollection<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 48	C#
 	System.Reactive.dll!System.Reactive.AutoDetachObserver<System.Collections.Generic.IReadOnlyCollection<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.OnNextCore(System.Collections.Generic.IReadOnlyCollection<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 62	C#
 	System.Reactive.dll!System.Reactive.ObserverBase<System.Collections.Generic.IReadOnlyCollection<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.OnNext(System.Collections.Generic.IReadOnlyCollection<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 36	C#
 	DynamicData.dll!DynamicData.List.Internal.QueryWhenChanged<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.Run.AnonymousMethod__1(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> changes) Line 24	C#
 	System.Reactive.dll!System.Reactive.AnonymousObserver<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.OnNextCore(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 67	C#
 	System.Reactive.dll!System.Reactive.ObserverBase<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.OnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 36	C#
 	System.Reactive.dll!System.Reactive.AutoDetachObserver<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.OnNextCore(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 62	C#
 	System.Reactive.dll!System.Reactive.ObserverBase<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.OnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 36	C#
 	System.Reactive.dll!System.Reactive.Sink<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.ForwardOnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 50	C#
 	System.Reactive.dll!System.Reactive.IdentitySink<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.OnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 16	C#
 	System.Reactive.dll!System.Reactive.Subjects.Subject<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.OnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 149	C#
 	DynamicData.dll!DynamicData.SourceList<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>.InvokeNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> changes) Line 166	C#
 	System.Reactive.dll!System.Reactive.AnonymousSafeObserver<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.OnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 44	C#
 	System.Reactive.dll!System.Reactive.Sink<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.ForwardOnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 50	C#
 	System.Reactive.dll!System.Reactive.Linq.ObservableImpl.Select<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>, DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.Selector._.OnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 48	C#
 	System.Reactive.dll!System.Reactive.Sink<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.ForwardOnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 50	C#
 	System.Reactive.dll!System.Reactive.IdentitySink<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.OnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 16	C#
 	System.Reactive.dll!System.Reactive.Sink<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.ForwardOnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 50	C#
 	System.Reactive.dll!System.Reactive.Concurrency.Synchronize<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>._.OnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 42	C#
 	System.Reactive.dll!System.Reactive.Sink<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.ForwardOnNext(DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent> value) Line 50	C#
 	System.Reactive.dll!System.Reactive.ObserveOnObserverNew<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.DrainStep(System.Collections.Concurrent.ConcurrentQueue<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>> q) Line 562	C#
 	System.Reactive.dll!System.Reactive.ObserveOnObserverNew<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>.DrainShortRunning(System.Reactive.Concurrency.IScheduler recursiveScheduler) Line 509	C#
 	System.Reactive.dll!System.Reactive.ObserveOnObserverNew<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>..cctor.AnonymousMethod__17_0(System.Reactive.Concurrency.IScheduler scheduler, System.Reactive.ObserveOnObserverNew<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>> self) Line 497	C#
 	System.Reactive.dll!System.Reactive.Concurrency.ScheduledItem<System.TimeSpan, System.Reactive.ObserveOnObserverNew<DynamicData.IChangeSet<ReactiveUI.Validation.Components.Abstractions.IValidationComponent>>>.InvokeCore() Line 207	C#
 	System.Reactive.dll!System.Reactive.Concurrency.ScheduledItem<System.TimeSpan>.Invoke() Line 45	C#
 	System.Reactive.dll!System.Reactive.Concurrency.CurrentThreadScheduler.Trampoline.Run(System.Reactive.Concurrency.SchedulerQueue<System.TimeSpan> queue) Line 151	C#
 	System.Reactive.dll!System.Reactive.Concurrency.CurrentThreadScheduler.Schedule<(System.Action<(System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)>, (System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._))>((System.Action<(System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)>, (System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)) state, System.TimeSpan dueTime, System.Func<System.Reactive.Concurrency.IScheduler, (System.Action<(System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)>, (System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)), System.IDisposable> action) Line 115	C#
 	System.Reactive.dll!System.Reactive.Concurrency.LocalScheduler.Schedule<(System.Action<(System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)>, (System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._))>((System.Action<(System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)>, (System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)) state, System.Func<System.Reactive.Concurrency.IScheduler, (System.Action<(System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)>, (System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)), System.IDisposable> action) Line 32	C#
 	System.Reactive.dll!System.Reactive.Concurrency.Scheduler.ScheduleAction<(System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)>(System.Reactive.Concurrency.IScheduler scheduler, (System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._) state, System.Action<(System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._)> action) Line 61	C#
 	System.Reactive.dll!System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>.SubscribeRaw(System.IObserver<System.Reactive.Unit> observer, bool enableSafeguard) Line 128	C#
 	System.Reactive.dll!System.Reactive.Producer<System.Reactive.Unit, System.Reactive.Linq.ObservableImpl.Catch<System.Reactive.Unit>._>.Subscribe(System.IObserver<System.Reactive.Unit> observer) Line 97	C#
 	System.Reactive.dll!System.ObservableExtensions.Subscribe<System.Reactive.Unit>(System.IObservable<System.Reactive.Unit> source) Line 37	C#
 	ReactiveUI.dll!ReactiveUI.ReactiveCommandBase<System.Reactive.Unit, System.Reactive.Unit>.ICommandExecute(object parameter) Line 172	C#
 	ReactiveUI.dll!ReactiveUI.ReactiveCommandBase<System.Reactive.Unit, System.Reactive.Unit>.System.Windows.Input.ICommand.Execute(object parameter) Line 111	C#
 	Avalonia.Controls.dll!Avalonia.Controls.Button.OnClick() Line 349	C#
 	Avalonia.Controls.dll!Avalonia.Controls.Button.OnPointerReleased(Avalonia.Input.PointerReleasedEventArgs e) Line 419	C#
 	Avalonia.Base.dll!Avalonia.Input.InputElement..cctor.AnonymousMethod__32_9(Avalonia.Input.InputElement x, Avalonia.Input.PointerReleasedEventArgs e) Line 225	C#
 	Avalonia.Base.dll!Avalonia.Interactivity.RoutedEvent<Avalonia.Input.PointerReleasedEventArgs>.AddClassHandler.__Adapter|0(object sender, Avalonia.Interactivity.RoutedEventArgs e) Line 127	C#
 	Avalonia.Base.dll!Avalonia.Interactivity.RoutedEvent.AddClassHandler.AnonymousMethod__0((object, Avalonia.Interactivity.RoutedEventArgs) args) Line 94	C#
 	Avalonia.Base.dll!Avalonia.Reactive.AnonymousObserver<(object, Avalonia.Interactivity.RoutedEventArgs)>.OnNext((object, Avalonia.Interactivity.RoutedEventArgs) value) Line 66	C#
 	Avalonia.Base.dll!Avalonia.Reactive.LightweightObservableBase<(object, Avalonia.Interactivity.RoutedEventArgs)>.PublishNext((object, Avalonia.Interactivity.RoutedEventArgs) value) Line 145	C#
 	Avalonia.Base.dll!Avalonia.Reactive.LightweightSubject<(object, Avalonia.Interactivity.RoutedEventArgs)>.OnNext((object, Avalonia.Interactivity.RoutedEventArgs) value) Line 25	C#
 	Avalonia.Base.dll!Avalonia.Interactivity.RoutedEvent.InvokeRaised(object sender, Avalonia.Interactivity.RoutedEventArgs e) Line 100	C#
 	Avalonia.Base.dll!Avalonia.Interactivity.EventRoute.RaiseEventImpl(Avalonia.Interactivity.RoutedEventArgs e) Line 144	C#
 	Avalonia.Base.dll!Avalonia.Interactivity.EventRoute.RaiseEvent(Avalonia.Interactivity.Interactive source, Avalonia.Interactivity.RoutedEventArgs e) Line 102	C#
 	Avalonia.Base.dll!Avalonia.Interactivity.Interactive.RaiseEvent(Avalonia.Interactivity.RoutedEventArgs e) Line 126	C#
 	Avalonia.Base.dll!Avalonia.Input.MouseDevice.MouseUp(Avalonia.Input.IMouseDevice device, ulong timestamp, Avalonia.Input.IInputRoot root, Avalonia.Point p, Avalonia.Input.PointerPointProperties props, Avalonia.Input.KeyModifiers inputModifiers, Avalonia.Input.IInputElement hitTest) Line 201	C#
 	Avalonia.Base.dll!Avalonia.Input.MouseDevice.ProcessRawEvent(Avalonia.Input.Raw.RawPointerEventArgs e) Line 90	C#
 	Avalonia.Base.dll!Avalonia.Input.MouseDevice.ProcessRawEvent(Avalonia.Input.Raw.RawInputEventArgs e) Line 38	C#
 	Avalonia.Base.dll!Avalonia.Input.InputManager.ProcessInput(Avalonia.Input.Raw.RawInputEventArgs e) Line 36	C#
 	Avalonia.Controls.dll!Avalonia.Controls.TopLevel.HandleInput(Avalonia.Input.Raw.RawInputEventArgs e) Line 753	C#
 	Avalonia.Win32.dll!Avalonia.Win32.WindowImpl.AppWndProc(nint hWnd, uint msg, nint wParam, nint lParam) Line 754	C#
 	Avalonia.Win32.dll!Avalonia.Win32.WindowImpl.WndProc(nint hWnd, uint msg, nint wParam, nint lParam) Line 23	C#
 	[External Code]	
 	Avalonia.Win32.dll!Avalonia.Win32.Win32DispatcherImpl.RunLoop(System.Threading.CancellationToken cancellationToken) Line 111	C#
 	Avalonia.Base.dll!Avalonia.Threading.DispatcherFrame.Run(Avalonia.Threading.IControlledDispatcherImpl impl) Line 122	C#
 	Avalonia.Base.dll!Avalonia.Threading.Dispatcher.PushFrame(Avalonia.Threading.DispatcherFrame frame) Line 53	C#
 	Avalonia.Base.dll!Avalonia.Threading.Dispatcher.MainLoop(System.Threading.CancellationToken cancellationToken) Line 81	C#
 	Avalonia.Controls.dll!Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(string[] args) Line 131	C#
 	Avalonia.Controls.dll!Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime(Avalonia.AppBuilder builder, string[] args, System.Action<Avalonia.Controls.ApplicationLifetimes.IClassicDesktopStyleApplicationLifetime> lifetimeBuilder) Line 258	C#
 	XecretsEz.dll!Xecrets.Ez.Program.AsyncMain(string[] args) Line 92	C#
 	XecretsEz.dll!Xecrets.Ez.Program.Main(string[] args) Line 60	C#

Screenshots 🖼️

No response

IDE

Visual Studio 2022

Operating system

Windows

Version

No response

Device

PC

ReactiveUI Version

4.0.9

Additional information ℹ️

No response

Activity

  1. xecrets commented on Aug 29, 2024

    @xecrets
    Author

    Ping? Anyone here?

  2. xecrets commented on Oct 11, 2024

    @xecrets
    Author

    Ok, so here's what seems to have happened. In commit 5d0c812 for issue #652 "Housekeeping Retire Xamarin" ReactiveValidationObject has a breaking change in that it now implements IDisposable . A ViewModel for example inheriting from ReactiveValidationObject after this change needs to ensure that it's actually disposed. Otherwise the above issue occurs. @ChrisPulman - perhaps this should be noted somewhere to clarify?

  3. github-actions commented on Mar 15, 2026

    @github-actions

    This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

  4. locked as resolved and limited conversation to collaborators on Mar 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      ⌂ 换网址