2012-04-16 10 views
14

次のプログラムは、ユーザーがキーの組み合わせを使用してキーボードレイアウトを変更するたびに再現性よくロックされます。トレイアプレットを使用してキーボードレイアウトを変更すると、ロックされません。レイアウトを英語に変更するとロックされません。 Taskが実行されない場合、ロックされません。キーボードレイアウトの変更で非常に単純なWPFプログラムがロックアップ(ハング)する

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()) 
     { 
     } 
    }); 
} 

、私は、キーボードレイアウトを切り替えることができます。クリック後、レイアウトを切り替える最初の試みでプログラムがロックアップされます。レイアウトはアルト + シフト + 又はCtrlキー + シフトを介して切り替えられる場合

重要なことに、このバグが発生し + (及びはなく)。

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

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

バウンティは:このバグは、割合の面で少数の人々に影響を与えますが、それは影響を与えないものが常に(対応するデータ損失の)ロックアップ彼らは習慣的にショートカット経由でキーボードレイアウトを変更するたびに発生します。私はいくつかのビジュアルが別のスレッドでレンダリングされるという事実を変えない回避策が必要です。

+0

私はこの問題が.Net 4.0で発生していないことを伝えたいだけです。 4.5ではテストできませんでした。 –

+0

私のために同じ - それは.Net 4.0で大丈夫に動作します。あなたが 'Alt + Shift + 2 'を押したときに変更するようにキーボードレイアウトを設定しようとする可能性があるならば、.Net 4.5 – Nikolay

+0

@Nikolayを使ってきれいなWindowsインストールで再現できれば、 ?私はこれを.NET 4上で実現することに成功しました。 –

答えて

8

Official Microsoft answer

この問題は、WPFの次のリリースで対処される[t]をNOます。 -WPFチーム

私はWinRTで忙しいと思っていますが、WPFはバックバーナーです。

+0

WM_INPUTLANGCHANGEREQUESTをWPFプログラムに転記すると、これを行うために使用されたキーに関係なく、まったく同じ方法でロックされます。また、Win10では、Alt + Shfit + 1/2に応答してスタートメニューの検索がロックされます。 –

関連する問題