.net 非常简单的WPF程序锁定(挂起)键盘布局更改

.net 非常简单的WPF程序锁定(挂起)键盘布局更改,.net,wpf,.net,Wpf,当用户通过组合键更改键盘布局时,以下程序会重复锁定。如果通过托盘小程序更改键盘布局,它不会锁定。将布局更改为英文时,它不会锁定。如果任务从未执行,则不会锁定 XAML: 在点击按钮之前,我可以随意切换键盘布局。单击后,程序将锁定第一次尝试切换布局 重要的是,只有通过Alt+Shift+2或Ctrl+Shift+2(和3,但不是1)切换布局时,才会出现此错误。 要避免在后台线程上使用DrawingVisual,已经太晚了。这已成为该产品不可或缺的核心功能。任何关于如何解决这个问题的想法都是非常受欢

当用户通过组合键更改键盘布局时,以下程序会重复锁定。如果通过托盘小程序更改键盘布局,它不会锁定。将布局更改为英文时,它不会锁定。如果
任务
从未执行,则不会锁定

XAML:

在点击按钮之前,我可以随意切换键盘布局。单击后,程序将锁定第一次尝试切换布局

重要的是,只有通过Alt+Shift+2或Ctrl+Shift+2(和3,但不是1)切换布局时,才会出现此错误。

要避免在后台线程上使用
DrawingVisual
,已经太晚了。这已成为该产品不可或缺的核心功能。任何关于如何解决这个问题的想法都是非常受欢迎的

此错误在.NET 4.0、Win32 7 32位和64位上重现

Bounty:从百分比上讲,这个bug影响的人很少,但它影响的人每次习惯性地通过快捷方式更改键盘布局时,都会不断导致锁定(相应的数据丢失)。我想要一个不会改变某些视觉效果在单独线程上呈现这一事实的解决方案。

:

这个问题将不会在WPF的下一版本中解决-WPF团队


我猜他们都忙于WinRT,WPF被搁置一旁。

只是想让你知道我在.Net 4.0上没有这个问题。但是,无法在4.5上测试它。对我来说也是如此-它在.NET4.0上运行正常。我认为如果你能在干净的windows安装上用.NET4复制它,你可以将它报告为.NET4.5的bug。5@Nikolay您是否有可能尝试在按下
Alt+Shift+2
时将键盘布局配置为更改?我已经成功地用它在.NET4上实现了这一点。使用alt+shift+2它将挂起!你是怎么找到它的?这是一个非常奇怪的错误。Windows可能通过Windows消息告诉你的应用程序布局已更改。使用spy++检查发送的是什么类型的windows消息,以及它们如何与键盘消息交叉。也许不同的组合键之间有着至关重要的区别。从那里,您可以尝试以不同于默认值的方式处理消息。将WM_INPUTLANGCHANGEREQUEST发布到WPF程序也将以完全相同的方式锁定它,而不管使用哪个键来执行此操作。此外,在Win10中,“开始”菜单搜索会锁定以响应Alt+Shfit+1/2。windows如何更改此类应用程序的输入语言?
<StackPanel>
    <TextBox></TextBox>
    <Button Click="Button_Click">Click me</Button>
</StackPanel>
private void Button_Click(object sender, RoutedEventArgs e)
{
    Task.Factory.StartNew(() =>
    {
        var visual = new DrawingVisual();
        using (var context = visual.RenderOpen())
        {
        }
    });
}