我在Azure辅助角色中使用WPF将多个图像合成为单个图像并保存到磁盘。在模拟器中一切运行良好,但是当我部署到Azure时,我希望看到缩放/调整大小的图像的区域是完全黑色的。
我将代码打包到控制台应用程序中,并使用远程桌面将其复制到托管辅助角色的同一实例。该应用程序运行完美。这告诉我,我需要能够运行我的代码的所有东西都出现在一个vanilla azure实例上。
在可能干扰WPF图像处理的辅助角色的上下文中运行有什么不同?
更新 这特别仅影响3D变换。在伪代码中,我正在做这样的事情:
ModelVisual3D
Viewport3DVisual
,设置正交相机并添加ModelVisual3D
RenderTargetBitmap
DrawingContext.DrawImage()
将RenderTargetBitmap
绘制到。{1}}上
“场景画布”当不需要3D时,图像会缩放并添加DrawingContext.DrawImage()
。这工作正常。因此,该问题与从3D场景创建或使用RenderTargetBitmap
有关。
更新 事实证明,当WPF不与桌面交互时,它不会呈现3D内容。模拟器在我的个人用户上下文中运行,而在Azure中,它作为系统帐户运行。通过创建以本地系统身份登录并执行相同步骤的Windows服务,可以在本地复制该问题。绕过这可能是一个巨大的挑战;我们可能不得不改用VM。
答案 0 :(得分:0)
答案 1 :(得分:0)
即使它在模拟器中工作正常,您是否可以尝试将WPF代码的ApartmentState更改为STA(在此处阅读WPF& STA:https://stackoverflow.com/a/1293433/384546)?
public class WorkerRole : RoleEntryPoint
{
public override void Run()
{
Thread thread = new Thread(new ThreadStart(MyWPFCode));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
while (true)
{
Thread.Sleep(10000);
}
}
private void MyWPFCode()
{
// WPF code goes here.
}
}