0

我在 Azure Worker Role 中使用 WPF 将多个图像合成为一个图像并保存到磁盘。模拟器中的一切都运行良好,但是当我部署到 Azure 时,我希望看到缩放/调整大小图像的区域完全是黑色的。

我将代码打包到控制台应用程序中,并使用远程桌面将其复制到托管辅助角色的同一实例中。该应用程序运行良好。这告诉我,能够运行我的代码所需的一切都存在于一个普通的天蓝色实例上。

在可能干扰 WPF 图像处理的辅助角色的上下文中运行有什么不同?

更新 这仅影响 3D 转换。在伪代码中,我正在做这样的事情:

  • 创建网格,应用纹理并将它们添加到ModelVisual3D
  • 创建一个Viewport3DVisual,设置一个正交相机并添加ModelVisual3D
  • 将视口渲染为RenderTargetBitmap
  • 用于在“场景画布”上DrawingContext.DrawImage()绘制RenderTargetBitmap

当不需要 3D 时,图像也会被缩放和添加DrawingContext.DrawImage()。这工作正常。所以这个问题在某种程度上与创建或使用RenderTargetBitmap3D 场景有关。

更新 事实证明,当 WPF 不与桌面交互时,它不会呈现 3D 内容。模拟器在我的个人用户上下文下运行,而在 Azure 中它作为系统帐户运行。通过创建作为本地系统登录的 Windows 服务并执行相同的步骤,可以在本地复制该问题。解决这个问题可能是一个很大的挑战。我们可能不得不使用虚拟机。

4

2 回答 2

0

Even though it works fine in the emulator, could you try changing the ApartmentState for your WPF code to STA (read about WPF & STA here: 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.
    }
}
于 2012-07-31T21:31:50.117 回答
0

您的工作人员角色是否在完全信任下运行

于 2012-07-31T20:53:17.017 回答