InvalidOperationException: 调度程序处理在 ImageOffsetProperty 上挂起

本文关键字:ImageOffsetProperty 挂起 处理 调度程序 InvalidOperationException | 更新日期: 2023-09-27 18:37:00

我正在使用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,将图像偏移属性安全地放在双精度中,然后返回它,但它总是返回 0。

是什么导致了InvalidOperationException

InvalidOperationException: 调度程序处理在 ImageOffsetProperty 上挂起

如何删除所有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);

如果您无权直接访问某些 UI 元素的 Dispatcher 属性。

相关文章:
  • 没有找到相关文章