运行.net 4.8的虚拟机中wpf应用程序中的随机任务死锁/内存损坏

运行.net 4.8的虚拟机中wpf应用程序中的随机任务死锁/内存损坏,wpf,task,task-parallel-library,mahapps.metro,Wpf,Task,Task Parallel Library,Mahapps.metro,所以我花了两天的大部分时间来解决一个非常奇怪的问题。在开发工作站或物理工作站上运行我的应用程序时,我从未遇到过运行应用程序的任何问题 如果是时候开始进行更有针对性的回归测试,那么该应用程序已经达到了开发生命周期中的一个点。这包括在虚拟机中运行应用程序,因为我希望支持在虚拟化环境中运行的应用程序 在虚拟化环境中进行测试时,我注意到一个非常奇怪的问题:我绑定的任何打开子窗口的命令有时都不起作用。子窗口将不会渲染,并且由于命令的canexcute给出false,该按钮将变灰,因为它认为该命令仍在运行。

所以我花了两天的大部分时间来解决一个非常奇怪的问题。在开发工作站或物理工作站上运行我的应用程序时,我从未遇到过运行应用程序的任何问题

如果是时候开始进行更有针对性的回归测试,那么该应用程序已经达到了开发生命周期中的一个点。这包括在虚拟机中运行应用程序,因为我希望支持在虚拟化环境中运行的应用程序

在虚拟化环境中进行测试时,我注意到一个非常奇怪的问题:我绑定的任何打开子窗口的命令有时都不起作用。子窗口将不会渲染,并且由于命令的canexcute给出false,该按钮将变灰,因为它认为该命令仍在运行。这个问题不能在物理机器上重现,并且已经尝试了很多

经过研究,我看到了很多关于虚拟机和wpf渲染的内容,还有一些人说要强制软件渲染而不是允许硬件渲染。这也不管用


进一步的研究/测试发现,这不一定是一个呈现简单子窗口的任务,也可能是任何可能导致此随机问题的任务。

在我绞尽脑汁之后,我找到了这些文章

长话短说,这是.NET4.8的一个问题,如果我在运行4.7.2的虚拟机中运行,这些问题是不可复制的。我将把这个问题留着讨论,因为在发现这些信息并进一步测试之后,我确实注意到了一些奇怪的事情

我发现,如果我在带有两个或更多vCPU的.NET4.7.2虚拟机上运行应用程序,这些随机问题是不可复制的。但是,如果我运行在带有.NET4.7.2和一个vCPU的虚拟机上,问题仍然会出现。此外,如果我在.NET4.8上使用两个或多个VCPU运行应用程序,则会出现问题。最后,如果我使用一个vCPU在.NET4.8上运行,则问题是不可复制的