15

次のプログラムは、ユーザーがキーの組み合わせによってキーボード レイアウトを変更するたびに、再現可能にロックアップします。トレイ アプレットを使用してキーボード レイアウトを変更してもロックしません。レイアウトを英語に変更してもロックしません。Tasknever が実行されてもロックしません。

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+ Shift+ 2(および3ではなく)を介してレイアウトが切り替えられた場合にのみ発生します1

DrawingVisualバックグラウンド スレッドでの使用を避けるには遅すぎます。これは、製品の不可欠なコア機能となっています。これを回避する方法についてのアイデアは大歓迎です。

このバグは、.NET 4.0、Win7 32 ビットおよび 64 ビットで再現されます。

報奨金 : このバグは、パーセンテージで言えばほとんどの人に影響を与えませんが、影響を受ける人は、ショートカットを介してキーボード レイアウトを習慣的に変更するたびに、(対応するデータの損失を伴う) ロックアップを常に引き起こします。一部のビジュアルが別のスレッドでレンダリングされるという事実を変更しない回避策が必要です。

4

1 に答える 1

9

マイクロソフトの公式回答:

この問題は、WPF の次のリリースでは対処されません。-WPF チーム。

彼らは皆、WinRT で忙しく、WPF は後回しになっていると思います。

于 2012-04-18T08:51:29.270 に答える