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
?
如何删除所有Background
的东西,只编写一个标准的依赖属性包装器,如下所示:
public double ImageOffset
{
get { return (double)GetValue(ImageOffsetProperty); }
set { SetValue(ImageOffsetProperty, value); }
}
从后台线程设置属性时,将分配放入Dispatcher.Invoke
或Dispatcher.BeginInvoke
调用中。
取代
obj.ImageOffset = someOffset;
由
Dispatcher.Invoke(() => obj.ImageOffset = someOffset);
或
Application.Current.Dispatcher.Invoke(() => obj.ImageOffset = someOffset);
如果您无权直接访问某些 UI 元素的 Dispatcher
属性。