AvaloniaUI / Avalonia

Develop Desktop, Embedded, Mobile and WebAssembly apps with C# and XAML. The most popular .NET UI client technology
https://avaloniaui.net
MIT License
25.63k stars 2.22k forks source link

NullReferenceException when calling WindowBase.Show #2136

Closed aelij closed 5 years ago

aelij commented 5 years ago

Version: 0.7.0

Repro: AvaloniaEdit demo, add this in line 76 and type . in the editor:

_textEditor.TextArea.TextEntered += textEditor_TextArea_TextEntered;
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
   at Avalonia.Data.Core.PropertyAccessorNode.StopListeningCore() in D:\a\1\s\src\Avalonia.Base\Data\Core\PropertyAccessorNode.cs:line 68
   at Avalonia.Data.Core.ExpressionNode.set_Target(WeakReference value) in D:\a\1\s\src\Avalonia.Base\Data\Core\ExpressionNode.cs:line 37
   at System.Reactive.AnonymousSafeObserver`1.OnNext(T value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\AnonymousSafeObserver.cs:line 45
   at System.Reactive.Linq.ObservableImpl.Select`2.Selector._.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\Select.cs:line 48
   at Avalonia.Data.Binding.UpdateSignal.PropertyChanged(Object sender, AvaloniaPropertyChangedEventArgs e) in D:\a\1\s\src\Markup\Avalonia.Markup\Data\Binding.cs:line 361
   at Avalonia.AvaloniaObject.RaisePropertyChanged(AvaloniaProperty property, Object oldValue, Object newValue, BindingPriority priority) in D:\a\1\s\src\Avalonia.Base\AvaloniaObject.cs:line 505
   at Avalonia.AvaloniaObject.PriorityValueChanged(AvaloniaProperty property, Int32 priority, Object oldValue, Object newValue) in D:\a\1\s\src\Avalonia.Base\AvaloniaObject.cs:line 409
   at Avalonia.ValueStore.AddValue(AvaloniaProperty property, Object value, Int32 priority) in D:\a\1\s\src\Avalonia.Base\ValueStore.cs:line 59
   at Avalonia.AvaloniaObject.SetStyledValue(AvaloniaProperty property, Object value, BindingPriority priority) in D:\a\1\s\src\Avalonia.Base\AvaloniaObject.cs:line 718
   at Avalonia.Controls.Presenters.ContentPresenter.UpdateChild() in D:\a\1\s\src\Avalonia.Controls\Presenters\ContentPresenter.cs:line 226
   at Avalonia.Controls.Presenters.ContentPresenter.ContentChanged(AvaloniaPropertyChangedEventArgs e) in D:\a\1\s\src\Avalonia.Controls\Presenters\ContentPresenter.cs:line 408
   at System.Reactive.Observer`1.OnNext(T value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Internal\Observers.cs:line 78
   at Avalonia.AvaloniaObject.RaisePropertyChanged(AvaloniaProperty property, Object oldValue, Object newValue, BindingPriority priority) in D:\a\1\s\src\Avalonia.Base\AvaloniaObject.cs:line 503
   at Avalonia.AvaloniaObject.PriorityValueChanged(AvaloniaProperty property, Int32 priority, Object oldValue, Object newValue) in D:\a\1\s\src\Avalonia.Base\AvaloniaObject.cs:line 409
   at Avalonia.PriorityValue.<>c__DisplayClass27_0.<UpdateCore>b__0() in D:\a\1\s\src\Avalonia.Base\PriorityValue.cs:line 289
   at Avalonia.Utilities.DeferredSetter`1.<>c__DisplayClass12_0`1.<SetAndNotify>b__0(Action notification) in D:\a\1\s\src\Avalonia.Base\Utilities\DeferredSetter.cs:line 144
   at Avalonia.PriorityValue.UpdateCore(ValueTuple`2 update, ValueTuple`2& backing, Action`1 notify) in D:\a\1\s\src\Avalonia.Base\PriorityValue.cs:line 289
   at Avalonia.PriorityValue.UpdateCore(Object update, ValueTuple`2& backing, Action`1 notify) in D:\a\1\s\src\Avalonia.Base\PriorityValue.cs:line 255
   at Avalonia.Utilities.DeferredSetter`1.SetAndNotify[TValue](AvaloniaProperty property, TValue& backing, SetterDelegate`1 setterCallback, TSetRecord value) in D:\a\1\s\src\Avalonia.Base\Utilities\DeferredSetter.cs:line 140
   at Avalonia.PriorityValue.UpdateValue(Object value, Int32 priority) in D:\a\1\s\src\Avalonia.Base\PriorityValue.cs:line 245
   at Avalonia.PriorityLevel.ActivateFirstBinding() in D:\a\1\s\src\Avalonia.Base\PriorityLevel.cs:line 191
   at Avalonia.PriorityBindingEntry.<>c__DisplayClass24_0.<ValueChanged>g__Signal|0() in D:\a\1\s\src\Avalonia.Base\PriorityBindingEntry.cs:line 110
   at Avalonia.Reactive.LightweightObservableBase`1.PublishNext(T value) in D:\a\1\s\src\Avalonia.Base\Reactive\LightweightObservableBase.cs:line 130
   at Avalonia.Reactive.LightweightObservableBase`1.PublishNext(T value) in D:\a\1\s\src\Avalonia.Base\Reactive\LightweightObservableBase.cs:line 130
   at Avalonia.Data.Core.PropertyAccessorNode.StartListeningCore(WeakReference reference) in D:\a\1\s\src\Avalonia.Base\Data\Core\PropertyAccessorNode.cs:line 62
   at Avalonia.Data.Core.ExpressionNode.StartListening() in D:\a\1\s\src\Avalonia.Base\Data\Core\ExpressionNode.cs:line 134
   at System.Reactive.AnonymousSafeObserver`1.OnNext(T value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\AnonymousSafeObserver.cs:line 45
   at System.Reactive.Linq.ObservableImpl.Select`2.Selector._.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\Select.cs:line 48
   at Avalonia.Data.Binding.UpdateSignal.PropertyChanged(Object sender, AvaloniaPropertyChangedEventArgs e) in D:\a\1\s\src\Markup\Avalonia.Markup\Data\Binding.cs:line 361
   at Avalonia.AvaloniaObject.RaisePropertyChanged(AvaloniaProperty property, Object oldValue, Object newValue, BindingPriority priority) in D:\a\1\s\src\Avalonia.Base\AvaloniaObject.cs:line 505
   at Avalonia.AvaloniaObject.PriorityValueChanged(AvaloniaProperty property, Int32 priority, Object oldValue, Object newValue) in D:\a\1\s\src\Avalonia.Base\AvaloniaObject.cs:line 409
   at Avalonia.ValueStore.AddValue(AvaloniaProperty property, Object value, Int32 priority) in D:\a\1\s\src\Avalonia.Base\ValueStore.cs:line 80
   at Avalonia.AvaloniaObject.SetStyledValue(AvaloniaProperty property, Object value, BindingPriority priority) in D:\a\1\s\src\Avalonia.Base\AvaloniaObject.cs:line 718
   at Avalonia.Controls.Presenters.ContentPresenter.UpdateChild() in D:\a\1\s\src\Avalonia.Controls\Presenters\ContentPresenter.cs:line 226
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 511
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Controls.StackPanel.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Controls\StackPanel.cs:line 198
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in D:\a\1\s\src\Avalonia.Layout\LayoutHelper.cs:line 41
   at Avalonia.Controls.Presenters.ContentPresenter.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Controls\Presenters\ContentPresenter.cs:line 319
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 564
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Controls.VirtualizingStackPanel.UpdateAdd(IControl child) in D:\a\1\s\src\Avalonia.Controls\VirtualizingStackPanel.cs:line 205
   at Avalonia.Controls.VirtualizingStackPanel.ChildrenChanged(Object sender, NotifyCollectionChangedEventArgs e) in D:\a\1\s\src\Avalonia.Controls\VirtualizingStackPanel.cs:line 118
   at Avalonia.Collections.AvaloniaList`1.NotifyAdd(IList t, Int32 index) in D:\a\1\s\src\Avalonia.Base\Collections\AvaloniaList.cs:line 502
   at Avalonia.Controls.Presenters.ItemVirtualizerSimple.CreateAndRemoveContainers() in D:\a\1\s\src\Avalonia.Controls\Presenters\ItemVirtualizerSimple.cs:line 342
   at Avalonia.Controls.Presenters.ItemVirtualizerSimple.UpdateControls() in D:\a\1\s\src\Avalonia.Controls\Presenters\ItemVirtualizerSimple.cs:line 162
   at Avalonia.Controls.VirtualizingStackPanel.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Controls\VirtualizingStackPanel.cs:line 89
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Controls.Presenters.ItemVirtualizerSimple.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Controls\Presenters\ItemVirtualizerSimple.cs:line 151
   at Avalonia.Controls.Presenters.ItemsPresenter.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Controls\Presenters\ItemsPresenter.cs:line 131
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Controls.Presenters.ScrollContentPresenter.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Controls\Presenters\ScrollContentPresenter.cs:line 210
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Controls.Grid.<>c__DisplayClass25_0.<MeasureOverride>g__MeasureOnce|2(Control child, Size size) in D:\a\1\s\src\Avalonia.Controls\Grid.cs:line 285
   at Avalonia.Controls.Grid.<>c__DisplayClass25_0.<MeasureOverride>b__0(Control child) in D:\a\1\s\src\Avalonia.Controls\Grid.cs:line 250
   at Avalonia.Controls.Utils.GridLayout.AppendMeasureConventions[T](IDictionary`2 source, Func`2 getDesiredLength) in D:\a\1\s\src\Avalonia.Controls\Utils\GridLayout.cs:line 132
   at Avalonia.Controls.Grid.MeasureOverride(Size constraint) in D:\a\1\s\src\Avalonia.Controls\Grid.cs:line 250
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 564
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in D:\a\1\s\src\Avalonia.Layout\LayoutHelper.cs:line 41
   at Avalonia.Controls.Border.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Controls\Border.cs:line 106
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 564
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 564
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in D:\a\1\s\src\Avalonia.Layout\LayoutHelper.cs:line 41
   at Avalonia.Controls.Presenters.ContentPresenter.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Controls\Presenters\ContentPresenter.cs:line 319
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 564
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 516
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in D:\a\1\s\src\Avalonia.Layout\Layoutable.cs:line 317
   at Avalonia.Layout.LayoutManager.Measure(ILayoutable control) in D:\a\1\s\src\Avalonia.Layout\LayoutManager.cs:line 165
   at Avalonia.Layout.LayoutManager.ExecuteInitialLayoutPass(ILayoutRoot root) in D:\a\1\s\src\Avalonia.Layout\LayoutManager.cs:line 111
   at Avalonia.Controls.WindowBase.Show() in D:\a\1\s\src\Avalonia.Controls\WindowBase.cs:line 179
   at AvaloniaEdit.CodeCompletion.CompletionWindowBase.Show() in C:\Source\Repos\AvaloniaEdit\src\AvaloniaEdit\CodeCompletion\CompletionWindowBase.cs:line 121
   at AvaloniaEdit.Demo.MainWindow.textEditor_TextArea_TextEntered(Object sender, TextInputEventArgs e) in C:\Source\Repos\AvaloniaEdit\src\AvaloniaEdit.Demo\MainWindow.xaml.cs:line 146
   at AvaloniaEdit.Editing.TextArea.OnTextEntered(TextInputEventArgs e) in C:\Source\Repos\AvaloniaEdit\src\AvaloniaEdit\Editing\TextArea.cs:line 765
   at AvaloniaEdit.Editing.TextArea.PerformTextInput(TextInputEventArgs e) in C:\Source\Repos\AvaloniaEdit\src\AvaloniaEdit\Editing\TextArea.cs:line 830
   at AvaloniaEdit.Editing.TextArea.OnTextInput(TextInputEventArgs e) in C:\Source\Repos\AvaloniaEdit\src\AvaloniaEdit\Editing\TextArea.cs:line 787
--- End of stack trace from previous location where exception was thrown ---
   at Avalonia.Interactivity.RoutedEvent.<>c__DisplayClass25_0.<AddClassHandler>b__0(Tuple`2 args) in D:\a\1\s\src\Avalonia.Interactivity\RoutedEvent.cs:line 115
   at Avalonia.Interactivity.Interactive.RaiseEventImpl(RoutedEventArgs e) in D:\a\1\s\src\Avalonia.Interactivity\Interactive.cs:line 188
   at Avalonia.Interactivity.Interactive.BubbleEvent(RoutedEventArgs e) in D:\a\1\s\src\Avalonia.Interactivity\Interactive.cs:line 156
   at Avalonia.Interactivity.Interactive.RaiseEvent(RoutedEventArgs e) in D:\a\1\s\src\Avalonia.Interactivity\Interactive.cs:line 141
   at Avalonia.Input.KeyboardDevice.ProcessRawEvent(RawInputEventArgs e) in D:\a\1\s\src\Avalonia.Input\KeyboardDevice.cs:line 130
   at Avalonia.Input.InputManager.ProcessInput(RawInputEventArgs e) in D:\a\1\s\src\Avalonia.Input\InputManager.cs:line 39
   at Avalonia.Win32.WindowImpl.WndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam) in D:\a\1\s\src\Windows\Avalonia.Win32\WindowImpl.cs:line 703
   at Avalonia.Win32.Interop.UnmanagedMethods.DispatchMessage(MSG& lpmsg)
   at Avalonia.Win32.Win32Platform.RunLoop(CancellationToken cancellationToken) in D:\a\1\s\src\Windows\Avalonia.Win32\Win32Platform.cs:line 107
   at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken) in D:\a\1\s\src\Avalonia.Base\Threading\Dispatcher.cs:line 65
   at Avalonia.Application.Run(Window mainWindow) in D:\a\1\s\src\Avalonia.Controls\Application.cs:line 237
   at AvaloniaEdit.Demo.Program.Main(String[] args) in C:\Source\Repos\AvaloniaEdit\src\AvaloniaEdit.Demo\Program.cs:line 14
grokys commented 5 years ago

Just tried to repro this on latest CI build and appears to be fixed.