2012-04-16 12 views
14

Poniższy program blokuje się w sposób powtarzalny za każdym razem, gdy użytkownik zmienia układ klawiatury za pomocą kombinacji klawiszy. Nie blokuje się, jeśli układ klawiatury zmienia się za pomocą apletu tacy. Nie blokuje się przy zmianie układu na angielski. Nie blokuje się, jeśli Task nigdy nie zostanie wykonana.Bardzo prosty program WPF blokuje się (zawiesza się) na zmianie układu klawiatury

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

Przed kliknięciem przycisku można przełączać układy klawiatury, jak mi się podoba. Po kliknięciu program blokuje się przy pierwszej próbie zmiany układu.

Co ważne, ten błąd pojawia się tylko wtedy, gdy układy są włączone poprzez Alt + Przesunięcie + lub Ctrl + Przesunięcie + (i , ale nie).

To jest sposób, o wiele za późno, aby uniknąć użycia DrawingVisual na wątkach tła. Stało się to integralną, podstawową cechą produktu. Wszelkie pomysły na obejście tego są bardzo mile widziane.

Ten błąd powtarza się na .NET 4.0, Win7 32-bit i 64-bit.

Bounty: ten błąd ma wpływ kilka osób w procentach, ale ci to nie wpływa stale będzie powodować lock-up (z odpowiednim utraty danych), za każdym razem one zwyczajowo zmienić układ klawiatury za pomocą skrótu. Chciałbym obejść, która nie zmienia faktu, że niektóre wizualizacje są renderowane w osobnym wątku.

+0

Chcę tylko poinformować, że nie mam tego problemu na .Net 4.0. Jednak nie można go przetestować w wersji 4.5. –

+0

To samo dla mnie - działa poprawnie na .Net 4.0. Myślę, że możesz zgłosić to jako błąd w .Net 4.5, jeśli możesz go odtworzyć w czystej instalacji systemu Windows za pomocą .Net 4.5 – Nikolay

+0

@Nikolay przy każdej okazji możesz spróbować skonfigurować układ klawiatury, aby zmienić po naciśnięciu klawisza "Alt + Shift + 2" ? Udało mi się to zrobić na platformie .NET 4. –

Odpowiedz

8

Official Microsoft answer:

Ten problem nie będzie [t] należy się zająć w następnej wersji WPF. Zespół -WPF.

Zgaduję, że oni wszyscy są zbyt zajęci WinRT i WPF jest na zapleczu.

+0

Wpisywanie WM_INPUTLANGCHANGEREQUEST do programu WPF również zablokuje go w dokładnie taki sam sposób, niezależnie od tego, które klucze zostały użyte do tego. Ponadto w Win10 wyszukiwanie menu Start blokuje się w odpowiedzi na Alt + Shfit + 1/2. –

Powiązane problemy