El siguiente programa se bloquea de forma reproducible cada vez que el usuario cambia la distribución de teclado a través de una combinación de teclas. No se bloquea si la distribución del teclado se cambia a través del applet de la bandeja. No se bloquea cuando se cambia el diseño a inglés. No se bloquea si el Task
nunca se ejecuta.muy sencillo programa WPF se bloquea (se bloquea) en el teclado del cambio de diseño
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())
{
}
});
}
Antes de que el botón de clic, que puede cambiar la distribución del teclado que me plazca. Después del clic, el programa se bloquea en el primer intento de cambiar de diseño.
importante destacar que este error sólo se produce si los diseños se conmutan a través de Alt + Shift + o Ctrl + Shift + (y , pero no).
Es demasiado tarde para evitar el uso de DrawingVisual
en los hilos de fondo. Esto se ha convertido en una característica integral del producto. Cualquier idea sobre cómo solucionar esto es muy bienvenida.
Este error reproduce en .NET 4.0, Win7 32 bits y 64 bits.
Bounty: este error afecta a pocas personas en términos de porcentaje, pero las que afecta constantemente causan el bloqueo (con la pérdida de datos correspondiente) cada vez que cambian habitualmente la distribución del teclado mediante el acceso directo. Me gustaría una solución alternativa que no cambia el hecho de que algunas imágenes se representan en un hilo separado.
Solo quiero que sepan que no tengo este problema en .Net 4.0. Sin embargo, no pudo probarlo en 4.5. –
Lo mismo para mí, funciona bien en .Net 4.0. Creo que puede informarlo como un error de .Net 4.5 si puede reproducirlo en la instalación de Windows con .Net 4.5 – Nikolay
@Nikolay, en caso de que pueda intentar configurar los diseños de su teclado para que cambien cuando presione 'Alt + Shift + 2' ? Logré hacer que esto suceda en .NET 4 con eso. –