- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的 .NET 应用程序能够生成 .png 文件,这些文件是 WPF Canvas 的屏幕截图。
这可以从客户端触发并由我们的另一个应用程序处理(本质上是将作业外包给它排队和处理的东西)可以在另一台机器上运行,然后负责截取屏幕截图.
此功能效果很好,并且已经使用了很长时间。这包括在 VM 上,即使没有人连接到该机器,即没有呈现显示。我们没有对代码进行任何更改。
但是,从 Windows 10 Version 1903(2019 年 5 月更新)开始,如果在无人连接的虚拟机上生成屏幕截图,则生成的屏幕截图始终为空白。如果您当前已连接到 VM,则它工作正常。我们还在更新 1909 和 2004 中重现了这个问题。
我们得到的结果是一个大小正确的完全透明的 .png。
我已经远程调试了创建屏幕截图的虚拟机,没有明显不正确的地方 - 所有属性(如高度、宽度和可见性)都是正确的。没有抛出异常。
我们认为这一定与没有可以访问的显示或类似的东西有关。然而,奇怪的是,这曾经工作得很好,所以尽管我们的代码保持不变,但我们对 Windows 更新之间可能发生的变化感到困惑。
是否有其他人遇到过此问题或类似问题并设法解决了它?我知道不完全支持在服务中使用 WPF - 这个用例是否会交叉到那个用例中,因为应用程序在创建渲染时在技术上没有显示?
这里是我们代码的一个精简示例以供引用:
' A method that ensures all contents of the canvas has been loaded in, then sets the canvases height and width based on its children,
' ensuring that it is layed out fully in preperation for the screenshot
theCanvas.UpdateSize()
Try
Dim renderBitmap As New RenderTargetBitmap(CInt(theCanvas.Width), CInt(theCanvas.Height), 96.0, 96.0, PixelFormats.Pbgra32)
renderBitmap.Render(theCanvas)
Dim directoryPath as String = Path.GetDirectoryName(saveLocation)
Directory.CreateDirectory(directoryPath)
Using outStream as New FileStream(saveLocation, FileMode.OpenOrCreate)
Dim encoder As New PngBitmapEncoder()
encoder.Frames.Add(BitmapFrame.Create(renderBitmap))
encoder.Save(outStream)
End Using
Catch ex as IOException
...
End Try
最佳答案
我们找出问题所在。
微软 fixed a Windows issue在 2017 年,在这样做的过程中,发布了默认行为,其中名为 ShouldRenderEvenWhenNoDisplayDevicesAreAvailable
的设置将设置为 False。显然,这意味着在我们的用例中,WPF 没有呈现任何内容,因为技术上没有可用的显示设备。
将以下内容添加到我们应用程序的 app.config 文件中可以解决此问题:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ShouldNotRenderInNonInteractiveWindowStation=false;Switch.System.Windows.Media.ShouldRenderEvenWhenNoDisplayDevicesAreAvailable=true" />
</runtime>
关于.net - 使用 PngBitmapEncoder 的 RenderTargetBitmap 在没有显示时在虚拟机上生成空白图像,Windows 10 版本 1903,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63951775/
我是一名优秀的程序员,十分优秀!