System.reactive 来自Observable.FromEventPattern的不兼容委托异常

System.reactive 来自Observable.FromEventPattern的不兼容委托异常,system.reactive,System.reactive,我编写了以下方便(或者我认为是这样)的扩展方法,用于Rx和WPF: public static IObservable<EventPattern<TViewModel, PropertyChangedEventArgs>> CreatePropertyChangedObservable<TViewModel>(this TViewModel vm) where TViewModel : INotifyPropertyChanged

我编写了以下方便(或者我认为是这样)的扩展方法,用于Rx和WPF:

public static IObservable<EventPattern<TViewModel, PropertyChangedEventArgs>>
            CreatePropertyChangedObservable<TViewModel>(this TViewModel vm) where TViewModel : INotifyPropertyChanged
        {
            return Observable.FromEventPattern<PropertyChangedEventHandler, TViewModel, PropertyChangedEventArgs>(
                h => vm.PropertyChanged += h, h => vm.PropertyChanged -= h);
        }

让你伤心的是代表们的签名是什么?@Engmativity有一些泛型,但我尝试的每件事都得到了同样的结果。一个例子是
void(EventPattern ep)
其中
ApplicationSettingsViewModel
实现了
INotifyPropertyChanged
。无论我使用的是lambda、静态函数还是成员函数,我都会遇到异常。一个复杂的问题是,在一个项目中定义了
ApplicationSettingsViewModel
,而在另一个项目中调用了
FromEventPattern
,第三次调用了
Subscribe
。请您更改问题中的代码以提供一个?@Enigmativity遗憾的是,否。问题只出现在我的一个项目中;在其他项目中看似相同的代码可以正常工作。我试图在体外复制这个问题,但还没有成功。
mscorlib.dll!System.Delegate.CreateDelegate(System.Type type, object firstArgument, System.Reflection.MethodInfo method, bool throwOnBindFailure)   Unknown
mscorlib.dll!System.Delegate.CreateDelegate(System.Type type, object firstArgument, System.Reflection.MethodInfo method)    Unknown
System.Reactive.dll!System.Reactive.ReflectionUtils.CreateDelegate<System.ComponentModel.PropertyChangedEventHandler>(object o, System.Reflection.MethodInfo method) Line 24    C#
System.Reactive.dll!System.Reactive.Linq.ObservableImpl.EventProducer<System.ComponentModel.PropertyChangedEventHandler, System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>.Session.Initialize() Line 323   C#
System.Reactive.dll!System.Reactive.Linq.ObservableImpl.EventProducer<System.ComponentModel.PropertyChangedEventHandler, System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>.Session.Connect(System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>> observer = {System.Reactive.AnonymousSafeObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>}) Line 269 C#
System.Reactive.dll!System.Reactive.Linq.ObservableImpl.EventProducer<System.ComponentModel.PropertyChangedEventHandler, System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>.Run(System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>> observer) Line 228  C#
System.Reactive.dll!System.Reactive.BasicProducer<System.__Canon>.SubscribeRaw.AnonymousMethod__1_0((System.Reactive.BasicProducer<System.__Canon> this, System.Reactive.Disposables.SingleAssignmentDisposable runAssignable, System.IObserver<System.__Canon> observer) tuple) Line 60    C#
System.Reactive.dll!System.Reactive.Concurrency.Scheduler.ScheduleAction.AnonymousMethod__76_0(System.Reactive.Concurrency.IScheduler _, (System.Func<(System.__Canon, System.__Canon, System.__Canon), System.IDisposable> action, (System.__Canon, System.__Canon, System.__Canon) state) tuple) Line 88  C#
System.Reactive.dll!System.Reactive.Concurrency.CurrentThreadScheduler.Schedule<System.ValueTuple<System.Func<(System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>), System.IDisposable>, (System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>)>>((System.Func<(System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>), System.IDisposable>, (System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>)) state, System.TimeSpan dueTime, System.Func<System.Reactive.Concurrency.IScheduler, (System.Func<(System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>), System.IDisposable>, (System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>)), System.IDisposable> action) Line 101 C#
System.Reactive.dll!System.Reactive.Concurrency.LocalScheduler.Schedule<System.ValueTuple<System.Func<(System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>), System.IDisposable>, (System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>)>>((System.Func<(System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>), System.IDisposable>, (System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>)) state, System.Func<System.Reactive.Concurrency.IScheduler, (System.Func<(System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>), System.IDisposable>, (System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>)), System.IDisposable> action) Line 32   C#
System.Reactive.dll!System.Reactive.Concurrency.Scheduler.ScheduleAction<System.ValueTuple<System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>>>(System.Reactive.Concurrency.IScheduler scheduler, (System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>) state, System.Func<(System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>, System.Reactive.Disposables.SingleAssignmentDisposable, System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>), System.IDisposable> action) Line 86    C#
System.Reactive.dll!System.Reactive.BasicProducer<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>>.SubscribeRaw(System.IObserver<System.Reactive.EventPattern<MyViewModel, System.ComponentModel.PropertyChangedEventArgs>> observer, bool enableSafeguard) Line 62   C#