C# 空域问题:WindowsFormsHost上的弹出内容将不会更新

C# 空域问题:WindowsFormsHost上的弹出内容将不会更新,c#,wpf,C#,Wpf,我被空域问题困住了。我的WPF应用程序承载一个winform组件。我想在组件加载和长时间活动期间显示一个弹出窗口,其中包含一些等待的请注意文本。这里我得到我的问题:弹出窗口是正确显示,但当我处理组件的繁忙事件,我不能更新弹出内容。下面是一些XAML代码: <WindowsFormsHost Name="wfh" Grid.Row="1" Grid.Column="0" ></WindowsFormsHost> <Popup x:Name="Overlay" Allo

我被空域问题困住了。我的WPF应用程序承载一个winform组件。我想在组件加载和长时间活动期间显示一个弹出窗口,其中包含一些等待的请注意文本。这里我得到我的问题:弹出窗口是正确显示,但当我处理组件的繁忙事件,我不能更新弹出内容。下面是一些XAML代码:

<WindowsFormsHost Name="wfh" Grid.Row="1" Grid.Column="0" ></WindowsFormsHost>
<Popup x:Name="Overlay" AllowsTransparency="True" Placement="Center" 
       StaysOpen="True"
       IsOpen="True" 
       PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor,   AncestorType=Grid, AncestorLevel=1}}">
    <TextBlock Name="tbWait"  Foreground="Red" />
</Popup>
我知道WinForm和WPF有什么问题,但我想让弹出窗口始终打开,让我显示windowformshost上的任何内容

编辑:我在代码中放置了一些断点,我看到文本属性正确地改变了。这些更改不会显示在UI中

你有什么解决办法吗?
谢谢你们

很遗憾,您无法在WindowsFormsHost上显示任何WPF内容。我自己花了很长时间与这个怪癖作斗争,直到我最终放弃并重新设计UI,使覆盖层不必覆盖WinForms组件。

根据@HansPassant评论,我可以用以下几行代码强制重画:

DispatcherFrame frame = new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate(object parameter) {
        frame.Continue = false;
        return null;
    }), null);
Dispatcher.PushFrame(frame);

也许这不是最优雅的解决方案,但它是解决我问题的一个有效补丁。

我可以在我的windowformshost上显示弹出窗口:我的问题是,虽然属性在codebehind中正确更改,但我无法在弹出窗口上更新信息。你真的看到弹出窗口了吗?或者你知道它是基于工具出现的吗?这很令人惊讶您是否尝试删除WFH以查看弹出窗口是否在没有它的情况下正确更新?是的,如果我只是隐藏WFH,弹出窗口将正确更新。可能重复@HansPassant,我将尝试使用您链接的问题中报告的解决方案。但我担心我的问题不是UI冻结或类似的问题,我可以用Dispatcher或BackgroundWorker解决。@HansPassant您链接的答案是有效的!非常感谢。
DispatcherFrame frame = new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate(object parameter) {
        frame.Continue = false;
        return null;
    }), null);
Dispatcher.PushFrame(frame);