This article describes hotfix rollup 3139551 that's available for the Microsoft .NET Framework 4.6.1 and the .NET Framework 4.6 on Windows 7 Service Pack 1 (SP1), Windows Server 2008 R2 SP1, Windows Server 2008 SP2, and Windows Vista SP2. For more information about the fixes in this hotfix rollup, see the "Issues that this hotfix rollup fixes" section.
Download informationThe following file is available for download from the Microsoft Download Center:
For more information about how to download Microsoft support files, click the following article number to go to the article in the Microsoft Knowledge Base:
PrerequisitesTo apply this hotfix, you must have the .NET Framework 4.6.1 or the .NET Framework 4.6 installed.
Restart requirementYou have to restart the computer after you apply this hotfix if any affected files are being used. We recommend that you close all .NET Framework-based applications before you apply this hotfix.
Hotfix replacement informationThis hotfix package doesn't replace a previously released hotfix package.
Issues that this hotfix rollup fixes
Issue 1When a WPF application uses a TreeViewItem outside the context of a TreeView, the application can encounter an InvalidCastException exception whose stack trace starts as follows:
Note This exception occurs when the TreeViewItem is in a virtualized list control (for example, a ListBox, DataGrid, or ListView control) that tries to find the scroll offset of the TreeViewItem or one of its descendants. For example, this exception occurs if you declare a TreeViewItem as the root of a DataTemplate, and the DataTemplate is used as the CellTemplate of a DataGrid column.
Issue 2Both System.Web.Caching and System.Runtime.Caching report the size of memory that's used by the whole AppDomain instead of the memory that's used by the cache items.
This is a regression from the .NET Framework 4.5 because of a change in the Timer implementation. In addition to reporting the wrong size, the additional objects that are referenced by the cache can significantly affect gen2 GC latency. In ASP.NET hosting scenarios, the cache also miscalculated the size of all caches in all app domains (as reported through a "Cache % Process Memory Limit Used" ASP.NET performance counter) when app domains were recycled.
This fix removes unintended references from the cache to the other app domain objects so that the correct size is reported. This fix also includes changes to improve the latency for System.Runtime.Caching on multi-core computers that are using Server GC. Additionally, after this fix is applied, the size of all caches in app domain recycling scenarios is calculated correctly.
Issue 3When you have a Windows Presentation Foundation (WPF) application that relies on mouse promotion of touch moves to handle touch user interaction (instead of by directly using touch events), you may experience an unusually low volume of promoted mouse moves.
Previously, WPF throttled mouse promotion of touch moves to avoid having a large volume of touch moves overwhelm the dispatcher. In the .NET Framework 4.6.1, a fix was introduced to throttle the number of touch moves that are processed. After this change, the throttling of mouse promotions caused an additional reduction in the number of mouse moves that were generated. The throttling of mouse promotions is now removed so that there should be almost a one-to-one correspondence between touch move events and promoted mouse move events.
Issue 4Assume that you're working on a WPF application that targets the .NET Framework 4.6. You try to set the CurrentThread.CurrentCulture or CurrentThread.CurrentUICulture value in any method that is invoked by the WPF Dispatcher by using a DispatcherOperation. For example, you try to set this value in a UI event handler or the MainWindow constructor. In this situation, the CurrentCulture and CurrentUICulture values are reset to their respective previous values at the end of the method. If an application sets CurrentUICulture in its MainWindow constructor or in a Button Click handler, that setting reverts to system UI culture.
This fix makes sure that the CurrentThread.CurrentCulture/CurrentUICulture values that are set in methods in a WPF application persist in the same manner as they did before the .NET Framework 4.6.
Issue 5In the .NET Framework 4.6, a new flag, TaskContinuationOptions.RunContinuationsAsynchronously, is added to the Task library. However, when you use this flag together with Task.WhenAll, Task.WhenAny or Task.Unwrap, the flag has no effect. The flag was introduced to avoid certain deadlock conditions. This fix makes sure that all kinds of Task continuations respect the new flag.
Issue 6In the .NET Framework 4.6, there's a bug in AppContext that causes the thread safety of the AppContext methods to be implemented incorrectly. AppContext is part of the infrastructure to reduce breaking changes. You can use AppContext to set and retrieve flags and to make decisions in your application based on that data.
This fix enables correct thread safety for the methods on AppContext that is related to setting and retrieving switch values.
Issue 7When you encounter an edge case that has your allocation and survival pattern, and you require a new segment on your managed heap, a garbage collector can calculate a commit size that's smaller than it should. This causes an access violation during the compact phase because the garbage collector is trying to write to uncommitted memory.
This fix calculates the size correctly.
Issue 8When you create native code for certain methods, the .NET Framework applications and NGEN processes may experience an unexpected crash.
Issue 9RyuJit generates incorrect instructions to compare 16-bit unsigned integers on registers. It produces an incorrect result if input values have different MSB values and if compare instructions that are generated use register operands.
This fix generates correct instructions.
Article ID: 3139551 - Last Review: Jul 21, 2016 - Revision: 1