该错误是在我的代码中随机引发的。有这么多的堆栈跟踪可用
当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();
}
}
}
是什么导致了错误,我该如何捕捉或禁用它?