Когда я трясусь/нервничаю/стучу пером по ComboBox, нажимаю на элементы, перемещаю перо, нажимая... через 5 или 10 минут элемент управления перестает работать.
Затем я могу открыть ComboBox, могу щелкнуть на элементе элемент выделяется, но ничего не происходит: ComboBox не закрывается, и событие щелчка не запускается.
Та же ошибка возникает с ContextMenu. И когда возникает ошибка, все ComboBox и все меню больше не работают. Это происходит, когда я нажимаю пером или пальцем, мышь работает нормально, даже если элементы управления больше не могут использоваться пером или пальцем.
При обычном использовании это происходит примерно 5 раз в рабочий день, что очень раздражает моих пользователей. Вам нужно немного «терпения», чтобы воспроизвести ошибку, может быть, это займет у вас более 10 минут ... но это ДЕЙСТВИТЕЛЬНО происходит.
Я сделал простое тестовое приложение с одним ComboBox и одной кнопкой с ContextMenu, с его помощью вы можете воспроизвести ошибку.
Целевая структура моего приложения — 4.6.1, скомпилированная с помощью VS2015. Мое приложение отлично работает с Windows 8.1 и Windows 10 Anniversary, с .NET 4.6.1 и 4.6.2.
Ошибка возникает на Microsoft Surface Pro 3 и Pro 4 с
- Windows 10 Creators Update (включая .NET 4.7)
- Windows 10 Anniversary Update и .NET 4.7 установлены
- Windows 8.1 и .NET 4.7 установлены.
- Установлено юбилейное обновление Windows 10 (.NET 4.6.2) и KB4034658 !!!
Для первых трех сценариев я узнал, как заблокировать установку Creators Update и .NET 4.7 Центром обновления Windows, по крайней мере, в течение следующих 6 месяцев. мои пользователи с Windows 10 должны либо жить с ошибками, либо полностью деактивировать все обновления Windows.
Вот код моего тестового приложения:
MainWindow.xaml:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DotNet47ComboBoxAndMenuError"
mc:Ignorable="d"
Title="" Height="900" Width="715" WindowStartupLocation="Manual" WindowState="Maximized">
<Grid>
<WrapPanel>
<ComboBox FontSize="16" Width="150">
<ComboBoxItem>ComboBoxItem 1</ComboBoxItem>
<ComboBoxItem>ComboBoxItem 2</ComboBoxItem>
<ComboBoxItem>ComboBoxItem 3</ComboBoxItem>
<ComboBoxItem>ComboBoxItem 4</ComboBoxItem>
<ComboBoxItem>ComboBoxItem 5</ComboBoxItem>
<ComboBoxItem>ComboBoxItem 6</ComboBoxItem>
<ComboBoxItem>ComboBoxItem 7</ComboBoxItem>
<ComboBoxItem>ComboBoxItem 8</ComboBoxItem>
<ComboBoxItem>ComboBoxItem 9</ComboBoxItem>
</ComboBox>
<Button x:Name="btnMenu" Content="MENU" FontSize="16" Margin="100,0,0,0">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="MenuItem 1"></MenuItem>
<MenuItem Header="MenuItem 2"></MenuItem>
<MenuItem Header="MenuItem 3"></MenuItem>
<MenuItem Header="MenuItem 4"></MenuItem>
<MenuItem Header="MenuItem 5"></MenuItem>
<MenuItem Header="MenuItem 6"></MenuItem>
<MenuItem Header="MenuItem 7"></MenuItem>
<MenuItem Header="MenuItem 8"></MenuItem>
<MenuItem Header="MenuItem 9"></MenuItem>
</ContextMenu>
</Button.ContextMenu>
</Button>
</WrapPanel>
</Grid>
</Window>
Только XAML, абсолютно никакого кода в моем тестовом приложении.
Мои пользователи также сообщают, что случайное нажатие на кнопки ничего не делает в диалоговых окнах. Когда это происходит, они могут нажать только верхнюю правую кнопку закрытия; выпадающие списки и меню больше не работают в главном окне, как описано выше: их нужно закрыть и перезапустить приложение. Не воспроизвел это с образцом, я думаю, это та же ошибка.
Кроме того, мое приложение иногда падает с Windows 10 Creators Update или .NET 4.7, возможно, также с KB4034658. К сожалению, я не могу сказать, когда происходят эти сбои, но подозреваю, что они каким-то образом связаны с описанной выше проблемой.
Пример информации о сбое из журнала событий Windows:
<Category>0</Category>
<ComputerName>DESKTOP-XXXXXX</ComputerName>
<EventCode>1026</EventCode>
<EventIdentifier>1026</EventIdentifier>
<EventType>1</EventType>
<InsertionStrings>Application: MyApp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IndexOutOfRangeException
at System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Insert(System.__Canon, System.__Canon, Boolean)
at System.Windows.Input.StylusWisp.WispLogic.CoalesceAndQueueStylusEvent(System.Windows.Input.RawStylusInputReport)
at System.Windows.Input.PenContext.FirePackets(Int32, Int32[], Int32)
at System.Windows.Input.PenThreadWorker.FlushCache(Boolean)
at System.Windows.Input.PenThreadWorker.FireEvent(System.Windows.Input.PenContext, Int32, Int32, Int32, Int32, IntPtr)
at System.Windows.Input.PenThreadWorker.ThreadProc()
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
</InsertionStrings>
<Logfile>Application</Logfile>
<Message>Application: MyApp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IndexOutOfRangeException
at System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Insert(System.__Canon, System.__Canon, Boolean)
at System.Windows.Input.StylusWisp.WispLogic.CoalesceAndQueueStylusEvent(System.Windows.Input.RawStylusInputReport)
at System.Windows.Input.PenContext.FirePackets(Int32, Int32[], Int32)
at System.Windows.Input.PenThreadWorker.FlushCache(Boolean)
at System.Windows.Input.PenThreadWorker.FireEvent(System.Windows.Input.PenContext, Int32, Int32, Int32, Int32, IntPtr)
at System.Windows.Input.PenThreadWorker.ThreadProc()
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
</Message>
<RecordNumber>250</RecordNumber>
<SourceName>.NET Runtime</SourceName>
<TimeGenerated>8/1/2017 2:10:56 PM</TimeGenerated>
<TimeWritten>8/1/2017 2:10:56 PM</TimeWritten>
<Type>Error</Type>
2-й образец:
<Category>0</Category>
<ComputerName>DESKTOP-XXXXXX</ComputerName>
<EventCode>1026</EventCode>
<EventIdentifier>1026</EventIdentifier>
<EventType>1</EventType>
<InsertionStrings>Application: MyApp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentNullException
at System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].FindEntry(System.__Canon)
at System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].TryGetValue(System.__Canon, System.__Canon ByRef)
at System.Windows.Input.StylusLogic.ProcessInputReport(System.Windows.Input.RawStylusInputReport)
at System.Windows.Input.PenContext.FirePenOutOfRange(Int32, Int32)
at System.Windows.Input.PenThreadWorker.ThreadProc()
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
</InsertionStrings>
<Logfile>Application</Logfile>
<Message>Application: MyApp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentNullException
at System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].FindEntry(System.__Canon)
at System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].TryGetValue(System.__Canon, System.__Canon ByRef)
at System.Windows.Input.StylusLogic.ProcessInputReport(System.Windows.Input.RawStylusInputReport)
at System.Windows.Input.PenContext.FirePenOutOfRange(Int32, Int32)
at System.Windows.Input.PenThreadWorker.ThreadProc()
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
</Message>
<RecordNumber>534</RecordNumber>
<SourceName>.NET Runtime</SourceName>
<TimeGenerated>7/31/2017 1:13:39 PM</TimeGenerated>
<TimeWritten>7/31/2017 1:13:39 PM</TimeWritten>
<Type>Error</Type>
Я сообщил об ошибках на страницах https://connect.microsoft.com/VisualStudio и https://github.com/Microsoft/dotnet/issues
Я не ожидаю получить решение для этой ошибки, но любая идея приветствуется.
Интересно, возникает ли ошибка только на MS Surface. Я не нашел другого сообщения об этой ошибке, поэтому я так думаю. Нет хороших шансов исправить это в ближайшее время... WPF и Surface - слишком экзотично.
В этом посте я надеюсь, что несколько человек с Surface воспроизведут ошибку, а также сообщат об ошибке в Microsoft, чтобы увеличить вероятность того, что она будет исправлена MS как можно скорее. Кроме того, я хотел бы знать, возникает ли эта ошибка только на планшетах MS Surface или также на других планшетах, возможно, только на планшетах с высоким разрешением?