InvalidOperationException异常:调度处理被挂起上ImageOffsetPro

2019-10-18 19:55发布

我使用C#和WPF,我试图沿着屏幕的图像条上滑动。 我是说实话,我从网上得到一些代码示例代码,把我从它所需的零件。

public double ImageOffset
{
    get
    {
        try
        {
            return (double)this.Dispatcher.Invoke(
               System.Windows.Threading.DispatcherPriority.Background,
               (DispatcherOperationCallback)delegate 
               { return GetValue(ImageOffsetProperty); }, ImageOffsetProperty);
        }
        catch
        {
            return (double)this.GetValue(ImageOffsetProperty);
        }
    }

    set
    {
        this.Dispatcher.BeginInvoke(DispatcherPriority.Background,
            (SendOrPostCallback)delegate 
            { SetValue(ImageOffsetProperty, (object)value); },
            (object)value);
    }
}

有时,当程序试图获得ImageOffsetProperty一个InvalidOperationException: Cannot perform this operation while dispatcher processing is suspended发生,我不知道如何解决它。

我也试过Dispatcher.BeginInvoke ,安全的双倍ImageOffsetProperty,然后返回,但它总是返回0。

是什么原因造成的InvalidOperationException

Answer 1:

如何删除所有的Background的东西,只写了一个标准的依赖属性的包装是这样的:

public double ImageOffset
{
    get { return (double)GetValue(ImageOffsetProperty); }
    set { SetValue(ImageOffsetProperty, value); }
}

当属性从后台线程设置,放在一个分配Dispatcher.InvokeDispatcher.BeginInvoke电话。

更换

obj.ImageOffset = someOffset;

通过

Dispatcher.Invoke(() => obj.ImageOffset = someOffset);

要么

Application.Current.Dispatcher.Invoke(() => obj.ImageOffset = someOffset);

如果你没有直接访问Dispatcher一些UI元素的属性。



文章来源: InvalidOperationException: dispatcher processing is suspended on ImageOffsetProperty