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.
Chcę tylko poinformować, że nie mam tego problemu na .Net 4.0. Jednak nie można go przetestować w wersji 4.5. –
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
@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. –