Wpf 什么是父母可自由支配?这个错误意味着什么?

Wpf 什么是父母可自由支配?这个错误意味着什么?,wpf,invalidoperationexception,dependencyobject,freezable,Wpf,Invalidoperationexception,Dependencyobject,Freezable,我得到了这个错误: 无法使用属于不同线程的DependencyObject,而不是 它的父代是可自由化的 这到底是什么意思?它是用英语写的吗?父对象是冻结的,还是可冻结的?如果让错误消失,有没有办法使父项不可自由释放 发生了什么: 我在WPF应用程序中有两个opengl winforms控件,到目前为止,一切都很顺利(我想)。现在,我添加了一个更新,这样当一个winform控件更新映像时,另一个也应该更新。这实际上过去是有效的,现在我得到了这个错误。单步执行代码会使崩溃发生在随机的地方,这让我相

我得到了这个错误:

无法使用属于不同线程的DependencyObject,而不是 它的父代是可自由化的

这到底是什么意思?它是用英语写的吗?父对象是冻结的,还是可冻结的?如果让错误消失,有没有办法使父项不可自由释放

发生了什么:

我在WPF应用程序中有两个opengl winforms控件,到目前为止,一切都很顺利(我想)。现在,我添加了一个更新,这样当一个winform控件更新映像时,另一个也应该更新。这实际上过去是有效的,现在我得到了这个错误。单步执行代码会使崩溃发生在随机的地方,这让我相信这是垃圾收集错误(即,另一个线程中的某些更新正在创建一些被垃圾收集的东西,而垃圾收集是在随机时间发生的)

该异常在主运行方法中捕获,它是InvalidOperationException

我在抓救命稻草。我从哪里开始

编辑:看起来导致问题的电话是:

        if (imagePanel.InvokeRequired)
        {
            imagePanel.Invoke(new System.Windows.Forms.MethodInvoker(delegate{
                imagePanel.ClearImages();
            }));
        }
        else
        {
            imagePanel.ClearImages();
        }

我还在追踪它;如果注释掉了这一系列行,崩溃仍然会发生,并且线程状态有一个“刚刚结束”的线程(因此垃圾收集假设)。

好的,我已经解决了。通常,我会删除这个问题,但要找到关于如何解决这个问题的任何信息都很痛苦

问题是一个看起来像这样的电话:

ImageBrush theBrush = new ImageBrush(new Bitmap(new Uri(...)));

if (labelStatus.Dispatcher.Thread == System.Threading.Thread.CurrentThread) {
    button.background = theBrush;
}
else {
   labelStatus.Dispatcher.BeginInvoke((System.Threading.ThreadStart)(delegate {
    button.background = theBrush;
   }));
}
但是!如果您这样做,那么dispatcher会工作,然后它会尝试删除画笔,但画笔本身显然也会在另一个位置被删除

因此,带回家的课程是,如果声明ImageBrush,然后在同一线程中删除它,如下所示:

void MyFunc(){
     ImageBrush theBrush = new ImageBrush(new Bitmap(new Uri(...)));
     button.background = theBrush;
}

if (labelStatus.Dispatcher.Thread == System.Threading.Thread.CurrentThread) {
    MyFunc();
}
else {
   labelStatus.Dispatcher.BeginInvoke((System.Threading.ThreadStart)(delegate {
       MyFunc();
   }));
}

为数不多的一种情况是,用图表描述一个句子会很有帮助……标题措辞极为糟糕。没有人可以通过搜索任何相关关键字来找到这个问题,因为标题中没有相关关键字。这不是一个支持论坛,正确地表达你的问题…嘿@Timwi,阅读答案。意识到我之所以把这个问题留在这里,是因为我确实找到了答案,但这非常令人沮丧。如果您想编辑标题,请获得更多的代表,并根据您的想法自己编辑。