当另一个应用程序全屏运行时,WPF 应用程序无法正确绘制

问题描述

我的应用程序比下面的要复杂一些,但我已将问题提炼为一个简单的案例。

我有一个绑定到对象属性的文本框。在应用程序内部工作时,绑定工作正常。

我的应用程序在另一个线程中运行 TCP 服务器,该服务器接收来自我为游戏创建的 mod 的消息(游戏是 Binding of Isaac,如果有帮助的话)。当用户在游戏中按下某个键时,mod 会向我的应用程序发送消息。当服务器收到消息时,它会通过应用程序的调度程序调用绑定属性的更改,如下所示:

App.Current.dispatcher.Invoke(delegate
{
    TestModel.Number = sum;
});

这在游戏窗口时工作正常;文本框根据消息更新并正确绘制。但是,当游戏处于全屏模式时,并且我在发送消息后按 alt-tab 返回到我的应用程序时,文本框文本直到我将鼠标悬停在鼠标上方时才会更新。我很确定文本框的文本值已正确更新,但它只是在游戏全屏时不会重绘,鼠标悬停会触发重绘。

奇怪的是,在启动我的应用程序的前 10 秒左右,即使游戏全屏显示,文本框也会正确更新。之后,问题就开始了。

我将不胜感激任何见解或解决方案。

解决方法

可能是驱动程序问题。尝试在启动时禁用硬件加速:

RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;

性能会受到影响,但应该可以正常渲染。