简体   繁体   English

Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid:本地创建的对象属于其他线程吗?

[英]Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid: Locally created object belongs to a different thread?

Just look at it, it doesn't make any sense: 看看它,没有任何意义:

在此处输入图片说明

The objects are created locally with no external dependencies. 对象是在本地创建的,没有外部依赖关系。 How can it be? 怎么可能?

(The type created here is a Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid ) (此处创建的类型是Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid

Here's the stack trace: 这是堆栈跟踪:

at System.Windows.Threading.Dispatcher.VerifyAccess()
at System.Windows.SystemResources.FindCachedResource(Object key, Object& resource, Boolean mustReturnDeferredResourceReference)
at System.Windows.SystemResources.FindResourceInternal(Object key, Boolean allowDeferredResourceReference, Boolean mustReturnDeferredResourceReference)
at System.Windows.FrameworkElement.FindResourceInternal(FrameworkElement fe, FrameworkContentElement fce, DependencyProperty dp, Object resourceKey, Object unlinkedParent, Boolean allowDeferredResourceReference, Boolean mustReturnDeferredResourceReference, DependencyObject boundaryElement, Boolean isImplicitStyleLookup, Object& source)
at System.Windows.FrameworkElement.FindResource(Object resourceKey)
at Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid.UpdateContainerHelper()
at Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid.OnSelectedObjectChanged(Object oldValue, Object newValue)
at Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid.OnSelectedObjectChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid.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, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at Xceed.Wpf.Toolkit.PropertyGrid.PropertyGrid.set_SelectedObject(Object value)
at GuiHelpers.Dialogs.PropertiesDialog.<>c__DisplayClass11.<Show>b__d() in c:\projects\pro\GuiHelpers\Dialogs\PropertiesDialog.cs:line 44

In case some initialization is performed using a dispatcher to the UI thread you should be able to use something like: 如果使用UI线程的分派器执行了一些初始化,则您应该可以使用以下代码:

System.Windows.Application.Current.Dispatcher.Invoke(
    System.Windows.Threading.DispatcherPriority.Normal,
    (System.Action)delegate()
    {
         tempPropertyGrid.SelectedObject = new object();
    });

I'm not sure this solves your problem, but it could be worth a try. 我不确定这是否可以解决您的问题,但是值得一试。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM