避免在PresentationCore.dll

时间:2015-06-03 16:54:41

标签: c# wpf

我知道还有其他问题,但我无法找到问题的答案。

我是WPF的新手,我正在构建媒体播放器,其中还包括显示图像。其中一个选项是平铺图像。这是这样做的:

private void TilePic(string path) {
    var containerWidth = MyMainWindow.Width;
    double xPos = 0;
    double yPos = 0;
    Image image = null;
    var imageSource = new BitmapImage(new Uri(path.Replace("/", "\\")));
    while (yPos < MyMainWindow.Height) {
        while (xPos < MyMainWindow.Width) {
            image = new Image();
            ImageBehavior.SetAnimatedSource(image, imageSource);
            image.Margin = new Thickness(xPos, yPos, 0, 0);
            image.Width = imageSource.Width;
            image.Height = imageSource.Height;
            MainGrid.Children.Add(image);
            xPos += imageSource.Width;
        }
        xPos = 0;
        yPos += imageSource.Height;
    }
}

对于一个特定的gif图像(3,13 MB 200 x 196),功能完成后我收到了。图像很小,但很长,对于1920x1080的屏幕,这会增加约50张图像。

A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in PresentationCore.dll
at System.Windows.Media.Imaging.RenderTargetBitmap.CopyCommon(RenderTargetBitmap sourceBitmap)

图像很小,但很长,对于1920x1080的屏幕,这会增加~50张图像。

我认为它是关于太多GDI句柄的。使用GDIView,我可以看到它有~7000个区域句柄。有人能告诉我这里发生了什么以及如何避免这种情况吗?

编辑:Okey,如果他们有帮助,这里是例外细节:

System.Runtime.InteropServices.COMException occurred
  _HResult=-2003304445
  _message=Exception from HRESULT: 0x88980003
  HResult=-2003304445
  IsTransient=false
  Message=Exception from HRESULT: 0x88980003
  Source=PresentationCore
  ErrorCode=-2003304445
  StackTrace:
       at System.Windows.Media.Imaging.RenderTargetBitmap.CopyCommon(RenderTargetBitmap sourceBitmap)
InnerException: 

0 个答案:

没有答案