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

时间:2012-04-16 14:34:23

标签: .net wpf

只要用户通过组合键更改键盘布局,以下程序就会重复锁定。如果通过托盘小程序更改键盘布局,它不会锁定。将布局更改为英语时,它不会锁定。如果Task永远不会执行,它就不会锁定。

XAML:

<StackPanel>
    <TextBox></TextBox>
    <Button Click="Button_Click">Click me</Button>
</StackPanel>

C#:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Task.Factory.StartNew(() =>
    {
        var visual = new DrawingVisual();
        using (var context = visual.RenderOpen())
        {
        }
    });
}

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

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

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

此错误在.NET 4.0,Win7 32位和64位上重现。

Bounty :这个bug在百分比方面影响的人很少,但它确实影响的那些每次他们习惯性地改变键盘布局时都会不断导致锁定(伴随着相应的数据丢失)捷径。我想要一个解决方法,它不会改变一些视觉效果在一个单独的线程上呈现的事实。

1 个答案:

答案 0 :(得分:8)

Official Microsoft answer

  

下一版WPF中不会解决此问题。 -WPF团队。

我猜他们都忙于WinRT而WPF却处于劣势。