Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: ObjectDisposedException thrown #665

Open
xecrets opened this issue May 25, 2024 · 2 comments
Open

[Bug]: ObjectDisposedException thrown #665

xecrets opened this issue May 25, 2024 · 2 comments
Labels
bug Something isn't working

Comments

@xecrets
Copy link

xecrets commented May 25, 2024

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

@xecrets xecrets added the bug Something isn't working label May 25, 2024
@xecrets
Copy link
Author

xecrets commented Aug 29, 2024

Ping? Anyone here?

@xecrets
Copy link
Author

xecrets commented Oct 11, 2024

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant