0

该错误是在我的代码中随机引发的。有这么多的堆栈跟踪可用

无标题-2

RaisedPropertyChanged被调用时更常见,例如

    public IImageProvider IForeground
    {
        get { return BlendifierEffect.ForegroundSource; }
        set
        {
            if (BlendifierEffect.ForegroundSource != value)
            {
                BlendifierEffect.ForegroundSource = value;          
                updateImageBlending();
                RaisedPropertyChanged();
            }
        }
    }

所以我注释掉了RaisedPropertyChanged()方法调用,但它仍然偶尔会被提出。

updateImageBlending()是一种在任何混合属性发生更改时重新渲染效果的方法。

    private async void updateImageBlending()
    {
        if (IsRendering)
        {
            return;
        }

        if (SelectedPicture == null)
        {
            return;
        }

        if (SelectedPicture.Index < 3)
        {
            return;
        }

        if (SelectedEffect == null )
        {
            IImageProcessor noEffect = FilterEffects.FirstOrDefault();

            if (noEffect != null)
            {
                RenderResult renderResult = await imageProcessorRenderer.RenderAsync(noEffect, RenderOption.RenderToSoftwareBitmap | RenderOption.RenderAtPreviewSize);
                imageProcessorRenderer.BlendBackground = renderResult.SoftwareBitmap;
                IBackground = new SoftwareBitmapImageSource(imageProcessorRenderer.BlendBackground);
            }
            else
            {
                return;
            }
        }

        Dispatcher.Dispatch(() => { IsRendering = true; });            

        SoftwareBitmap softwareBitmap = null;       
        softwareBitmapRenderer.Size = imageProcessorRenderer.PreviewSize;
        softwareBitmapRenderer.RenderOptions = RenderOptions.Cpu;
        softwareBitmap = await softwareBitmapRenderer.RenderAsync();

        Dispatcher.Dispatch(async () =>
        {
            WriteableBitmapPreview = await convertPreviewToWriteableBitmap(softwareBitmap, null);
        });


        Dispatcher.Dispatch(() => { IsRendering = false; });

    }

softwareBitmapRender接受 aBlendEffect并在开始时初始化。

if (BlendifierEffect == null)
{
    BlendifierEffect = new BlendEffect();
    BlendifierEffect.GlobalAlpha = 0.5d;
    BlendifierEffect.BlendFunction = BlendFunction.Normal;
    BlendifierEffect.TargetOutputOption = OutputOption.PreserveAspectRatio;
    BlendifierEffect.TargetArea = new Rect(0d, 0d, Scale, Scale);
}
if (softwareBitmapRenderer == null)
{
    softwareBitmapRenderer = new SoftwareBitmapRenderer(BlendifierEffect);
}   

BlendEffect随着用户更改其属性而更新,例如

    public IImageProvider Mask
    {
        get { return BlendifierEffect.MaskSource; }
        set
        {
            if (BlendifierEffect.MaskSource != value)
            {
                BlendifierEffect.MaskSource = value;
                updateImageBlending();
            }
        }
    }

是什么导致了错误,我该如何捕捉或禁用它?

4

0 回答 0