resueltos recorrido profundidad preorden ejercicios ejemplos codigo busqueda binarios binario arboles arbol c# wpf backgroundworker

c# - recorrido - ¿Qué significa que no se pueden modificar los hijos lógicos para este nodo en este momento porque significa que está en progreso un árbol?



recorrido de arboles binarios ejercicios resueltos (9)

Estoy configurando el DataContext de un objeto en el método completado de un subproceso de trabajo en segundo plano. Por alguna razón, me sale un error que dice:

No se pueden modificar los hijos lógicos para este nodo en este momento porque hay un recorrido de árbol en curso que apunta a la línea Chart1.DataContext = allDates.

¿Qué significa un paseo por los árboles? He intentado hacer este conjunto utilizando también una operación de Dispatcher y eso da el mismo error ... ¿Alguna idea? Google no ve nada en este mensaje de error.

El código que está causando esto es interno al kit de herramientas de gráficos de Microsoft ... Me pregunto si he encontrado un error en su control ...

Sin despachador:

void bg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { ArticlesPerTimePeriodResult result = (ArticlesPerTimePeriodResult)e.Result; lvArticles.ItemsSource = result.DatesOfArticles; Chart1.DataContext = result.AllDates; }

Con el despachador:

void bg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { ArticlesPerTimePeriodResult result = (ArticlesPerTimePeriodResult)e.Result; lvArticles.ItemsSource = result.DatesOfArticles; Dispatcher.BeginInvoke((Action<List<KeyValuePair<DateTime,int>>>)(delegate(List<KeyValuePair<DateTime,int>> allDates) { Chart1.DataContext = allDates; }), result.AllDates); //Chart1.DataContext = result.AllDates; }

Error:

System.Reflection.TargetInvocationException was unhandled Message="Exception has been thrown by the target of an invocation." Source="mscorlib" StackTrace: at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at System.Delegate.DynamicInvokeImpl(Object[] args) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler) at System.Windows.Threading.DispatcherOperation.InvokeImpl() at System.Threading.ExecutionContext.runTryCode(Object userData) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler) at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.TranslateAndDispatchMessage(MSG& msg) at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) at System.Windows.Application.RunInternal(Window window) at NewsCluesWpf.App.Main() in C:/SoftwareInstall/VSProjects/NewsClues/NewsCluesWpf/obj/Debug/App.g.cs:line 0 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException: System.InvalidOperationException Message="Cannot modify the logical children for this node at this time because a tree walk is in progress." Source="PresentationFramework" StackTrace: at System.Windows.FrameworkElement.AddLogicalChild(Object child) at System.Windows.Controls.UIElementCollection.InsertInternal(Int32 index, UIElement element) at System.Windows.Controls.DataVisualization.ObservableCollectionListAdapter`1.<>c__DisplayClass1.<OnCollectionChanged>b__0(T item, Int32 index) at System.Windows.Controls.DataVisualization.EnumerableFunctions.ForEachWithIndex[T](IEnumerable`1 that, Action`2 action) at System.Windows.Controls.DataVisualization.ObservableCollectionListAdapter`1.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e) at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e) at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedAction action, Object item, Int32 index) at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item) at System.Windows.Controls.DataVisualization.ReadOnlyObservableCollection`1.InsertItem(Int32 index, T item) at System.Collections.ObjectModel.Collection`1.Insert(Int32 index, T item) at System.Windows.Controls.DataVisualization.AggregatedObservableCollection`1.<>c__DisplayClass14.<>c__DisplayClass16.<ChildCollectionCollectionChanged>b__f(ReadOnlyObservableCollection`1 that) at System.Windows.Controls.DataVisualization.ReadOnlyObservableCollection`1.Mutate(Action`1 action) at System.Windows.Controls.DataVisualization.AggregatedObservableCollection`1.<>c__DisplayClass14.<ChildCollectionCollectionChanged>b__e(T item, Int32 index) at System.Windows.Controls.DataVisualization.EnumerableFunctions.ForEachWithIndex[T](IEnumerable`1 that, Action`2 action) at System.Windows.Controls.DataVisualization.AggregatedObservableCollection`1.ChildCollectionCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e) at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e) at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedAction action, Object item, Int32 index) at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item) at System.Collections.ObjectModel.Collection`1.Add(T item) at System.Windows.Controls.DataVisualization.Charting.Chart.AddAxisToChartArea(Axis axis) at System.Windows.Controls.DataVisualization.Charting.Chart.ActualAxesCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e) at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e) at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e) at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedAction action, Object item, Int32 index) at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item) at System.Windows.Controls.DataVisualization.UniqueObservableCollection`1.InsertItem(Int32 index, T item) at System.Collections.ObjectModel.Collection`1.Add(T item) at System.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.GetAxes(DataPoint firstDataPoint, Func`2 independentAxisPredicate, Func`1 independentAxisFactory, Func`2 dependentAxisPredicate, Func`1 dependentAxisFactory) at System.Windows.Controls.DataVisualization.Charting.AreaSeries.GetAxes(DataPoint firstDataPoint) at System.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.GetAxes() at System.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.OnDataPointsChanged(IList`1 newDataPoints, IList`1 oldDataPoints) at System.Windows.Controls.DataVisualization.Charting.DataPointSingleSeriesWithAxes.OnDataPointsChanged(IList`1 newDataPoints, IList`1 oldDataPoints) at System.Windows.Controls.DataVisualization.Charting.LineAreaBaseSeries`1.OnDataPointsChanged(IList`1 newDataPoints, IList`1 oldDataPoints) at System.Windows.Controls.DataVisualization.Charting.DataPointSeries.LoadDataPoints(IEnumerable newItems, IEnumerable oldItems) at System.Windows.Controls.DataVisualization.Charting.DataPointSeries.Refresh() at System.Windows.Controls.DataVisualization.Charting.DataPointSeries.OnItemsSourceChanged(IEnumerable oldValue, IEnumerable newValue) at System.Windows.Controls.DataVisualization.Charting.DataPointSeries.OnItemsSourceChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, OperationType operationType) at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp) at System.Windows.Data.BindingExpression.Invalidate(Boolean isASubPropertyChange) at System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange) at System.Windows.Data.BindingExpression.Activate(Object item) at System.Windows.Data.BindingExpression.HandlePropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args) at System.Windows.Data.BindingExpression.OnPropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args) at System.Windows.DependentList.InvalidateDependents(DependencyObject source, DependencyPropertyChangedEventArgs sourceArgs) at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, OperationType operationType) at System.Windows.TreeWalkHelper.OnInheritablePropertyChanged(DependencyObject d, InheritablePropertyChangeInfo info) at System.Windows.DescendentsWalker`1._VisitNode(DependencyObject d) at System.Windows.DescendentsWalker`1.WalkLogicalChildren(FrameworkElement feParent, FrameworkContentElement fceParent, IEnumerator logicalChildren) at System.Windows.DescendentsWalker`1.WalkFrameworkElementLogicalThenVisualChildren(FrameworkElement feParent, Boolean hasLogicalChildren) at System.Windows.DescendentsWalker`1.IterateChildren(DependencyObject d) at System.Windows.DescendentsWalker`1._VisitNode(DependencyObject d) at System.Windows.DescendentsWalker`1.WalkLogicalChildren(FrameworkElement feParent, FrameworkContentElement fceParent, IEnumerator logicalChildren) at System.Windows.DescendentsWalker`1.WalkFrameworkElementLogicalThenVisualChildren(FrameworkElement feParent, Boolean hasLogicalChildren) at System.Windows.DescendentsWalker`1.IterateChildren(DependencyObject d) at System.Windows.DescendentsWalker`1._VisitNode(DependencyObject d) at System.Windows.DescendentsWalker`1.WalkLogicalChildren(FrameworkElement feParent, FrameworkContentElement fceParent, IEnumerator logicalChildren) at System.Windows.DescendentsWalker`1.WalkFrameworkElementLogicalThenVisualChildren(FrameworkElement feParent, Boolean hasLogicalChildren) at System.Windows.DescendentsWalker`1.IterateChildren(DependencyObject d) at System.Windows.DescendentsWalker`1._VisitNode(DependencyObject d) at System.Windows.DescendentsWalker`1.WalkLogicalChildren(FrameworkElement feParent, FrameworkContentElement fceParent, IEnumerator logicalChildren) at System.Windows.DescendentsWalker`1.WalkFrameworkElementLogicalThenVisualChildren(FrameworkElement feParent, Boolean hasLogicalChildren) at System.Windows.DescendentsWalker`1.IterateChildren(DependencyObject d) at System.Windows.DescendentsWalker`1._VisitNode(DependencyObject d) at System.Windows.DescendentsWalker`1.WalkFrameworkElementLogicalThenVisualChildren(FrameworkElement feParent, Boolean hasLogicalChildren) at System.Windows.DescendentsWalker`1.IterateChildren(DependencyObject d) at System.Windows.DescendentsWalker`1.StartWalk(DependencyObject startNode, Boolean skipStartNode) at System.Windows.TreeWalkHelper.InvalidateOnInheritablePropertyChange(FrameworkElement fe, FrameworkContentElement fce, InheritablePropertyChangeInfo info, Boolean skipStartNode) at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, OperationType operationType) at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, OperationType operationType, Boolean isInternal) at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value) at System.Windows.FrameworkElement.set_DataContext(Object value) at NewsCluesWpf.ArticlesPerDay.<bg_RunWorkerCompleted>b__1(List`1 allDates) in C:/SoftwareInstall/VSProjects/NewsClues/NewsCluesWpf/ArticlesPerDay.xaml.cs:line 72 InnerException:


Acabo de tener este problema con el kit de herramientas de gráficos WPF. Todos dijeron que no debían vincularse a DataContext y vincularse directamente a ItemsSource, pero yo ya estaba vinculando a ItemsSource y seguí recibiendo el error. En mi caso, estaba vinculado al artículo SelectedItem de un ListBox o TreeView. Lo único en lo que podía trabajar era vincular manualmente a ItemsSource cuando se ItemsSource el evento SelectedItemChanged ().

private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) { if (TreeView.SelectedItem != null) LineSeries.ItemsSource = (TreeView.SelectedItem as MyObject).Items; }


Aparentemente, se está realizando alguna operación que está cambiando una colección mientras se está utilizando. Eso es un gran no-no.

Sin analizar más el código, eso es todo lo que puedo decir.


Después de jugar más, creo que este es un error en el kit de herramientas de gráficos de Silverlight.

El siguiente código provoca un bloqueo reproducible.

int runCount = 0; private void bindChart(string searchString) { List<KeyValuePair<DateTime, int>> dataEmpty = new List<KeyValuePair<DateTime, int>>(); List<KeyValuePair<DateTime, int>> dataFilled = new List<KeyValuePair<DateTime, int>>(); dataFilled.Add(new KeyValuePair<DateTime, int>(DateTime.Today, 1)); if (runCount == 0) { Chart1.DataContext= dataEmpty; } else { Chart1.DataContext = dataFilled; } runCount++; }

XAML:

<charting:Chart Grid.Row="0" Title="Title" LegendTitle="Legend" Name="Chart1" Grid.RowSpan="2"> <charting:AreaSeries ItemsSource="{Binding}" DependentValuePath="Value" IndependentValuePath="Key" Background="Red" /> </charting:Chart>

Esto fallará en la segunda llamada a bindChart.


En lugar de restablecer la reutilización de DataContext través de una colección observable, también funciona ...

int runCount = 0; private void bindChart() { ObservableCollection<KeyValuePair<DateTime, int>> data = new ObservableCollection<KeyValuePair<DateTime, int>>(); if (runCount == 0) { this.DataContext = dataEmpty; } else { var de = this.DataContext as ObservableCollection<KeyValuePair<DateTime, int>>; de.Clear(); for (var i = 0; i < (new Random(DateTime.Now.Second)).Next(100); i++) { de.Add(new KeyValuePair<DateTime, int>(DateTime.Today.AddDays(i), i)); } } runCount++; }


Hej

Acabo de tener el error y lo arreglé también. El error también se produjo al configurar el datacontext.

Descubrí que tenía una selección-cambio de suscripción en la lista que tenía establecido su datacontext. En esta selección, cambié, estaba alterando otra propiedad con soporte de notificación, que tenía un elemento visual vinculante.

Resolvió el problema usando el despachador para establecer la propiedad.

Así que trate de buscar suscripciones en los cambios ...


Tengo el mismo problema. Aunque no estoy usando ningún hilo de fondo. Acabo de tener un control deslizante y en el evento ValueChanged para el control deslizante, estoy recalculando y restableciendo el DataContext.

Por ejemplo, un gráfico de quemado. A medida que cambia el valor inicial, el gráfico se actualiza automáticamente (esencialmente el eje Y de la serie de líneas).

Cambiar el datacontext trabajado en la versión beta de Silverlight 3. No funciona en la versión de lanzamiento. El comentario anterior sobre la configuración (Chart1.Series [0] como DataPointSeries) .ItemsSource funciona para mí


Tuve este problema cuando un control principal (AvalonDock) activó el control de usuario secundario para recargar: el control de usuario activaría su evento "Cargado" y mi aplicación se bloquearía.

Quité el controlador de eventos Loaded del control de usuario y usé el evento Initialized en su lugar. Eso solucionó mi problema aunque no estoy totalmente seguro de por qué.


Aquí está mi investigación al respecto.

Es una excepción de WPF lanzada por los métodos Add / RemoveLogicalChild en FrameworkElement y FrameworkContentElement cuando una caminata de árbol está en progreso. Los detalles aburridos de esto están en la publicación del blog, pero la conclusión es que no se puede hacer más que probarla y luego atraparla donde ocurra. La excepción debe ser una ocurrencia relativamente rara.


Resuelto

El problema: quiero actualizar mi gráfico en la GUI cada vez que se modifican algunos datos.

myChart.DataContext = MTFdata;

cuando hago esto me sale el error: no se pueden modificar los hijos lógicos para este nodo en este momento porque hay un paseo por el árbol en curso

Cómo lo resolví:

Instado de esto:

<chartingToolkit:LineSeries DependentValuePath="Key" IndependentValuePath="Value" ItemsSource="{Binding}" IsSelectionEnabled="False" >

Utilizar esta:

<chartingToolkit:LineSeries DependentValuePath="Key" IndependentValuePath="Value" ItemsSource="{Binding}" DataContext="{Binding}" IsSelectionEnabled="False" >

Utilice tanto ItemsSource="{Binding}" como DataContext="{Binding}"

¡Espero que esto ayude!