Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用ReactiveCommand?_C#_Wpf_Mvvm_Reactiveui - Fatal编程技术网

C# 如何使用ReactiveCommand?

C# 如何使用ReactiveCommand?,c#,wpf,mvvm,reactiveui,C#,Wpf,Mvvm,Reactiveui,我有一个使用ReactiveCommand的viewmodel: public ReactiveCommand<Unit, Unit> Command { get; } public MyViewModel() { Command = ReactiveCommand<Unit, Unit>.Create(MyMethod); } 当我按下按钮MyMethod被执行时,在MyMethod中的最后一个操作符执行之后,我的应用程序崩溃: InvalidOperati

我有一个使用ReactiveCommand的viewmodel:

public ReactiveCommand<Unit, Unit> Command { get; }

public MyViewModel()
{
    Command = ReactiveCommand<Unit, Unit>.Create(MyMethod);
}
当我按下按钮MyMethod被执行时,在MyMethod中的最后一个操作符执行之后,我的应用程序崩溃:

InvalidOperationException:调用线程无法访问此对象,因为其他线程拥有它

StackTrace:
在System.Windows.Threading.Dispatcher.VerifyAccess()中
位于System.Windows.DependencyObject.GetValue(DependencyProperty dp)
在System.Windows.Controls.Primitives.ButtonBase.get_命令()中
在System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute()中
位于System.Windows.Controls.Primitives.ButtonBase.OnCanExecuteChanged(对象发送方,事件参数e)
位于System.Windows.Input.CanExecuteChangedEventManager.HandlerSink.OnCanExecuteChanged(对象发送方,事件参数e)
在ReactiveUI.ReactiveCommand.OnCanExecuteChanged()处
在ReactiveUI.ReactiveCommand`2.b_uu9_u6(布尔值)
位于D:\a\1\s\Rx.NET\Source\src\System.Reactive\AnonymousSafeObserver.cs中的System.Reactive.AnonymousSafeObserver`1.OnNext(T值):第54行
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\RefCount.cs中的System.Reactive.Linq.ObservableImpl.RefCount`1.uuu.OnNext(TSource值)处:第66行
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs中的System.Reactive.Subjects.FastImmediateObserver`1.ensurereactive(Int32计数)处
位于D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs中的System.Reactive.Subjects.FastImmediateObserver`1.ensurereactive()
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs中的System.Reactive.Subjects.ReplaySubject`1.ReplayBase.OnNext(T值)处
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs中的System.Reactive.Subjects.ReplaySubject`1.OnNext(T值)处:第167行
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\observeImpl.AsObservable`1.\uonNext(TSource value)中的System.Reactive.Linq.ObservableImpl.AsObservable`1.\TSource值:第32行
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\DistinctUntilChanged`2.OnNext(TSource value)中的System.Reactive.Linq.Observable\DistinctUntilChanged`2
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\combinelatetest.cs中的System.Reactive.Linq.ObservableImpl.combineTest`3.\uuu.SecondObserver.OnNext(TSecond value)处
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\RefCount.cs中的System.Reactive.Linq.ObservableImpl.RefCount`1.uuu.OnNext(TSource值)处:第66行
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs中的System.Reactive.Subjects.FastImmediateObserver`1.ensurereactive(Int32计数)处
位于D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs中的System.Reactive.Subjects.FastImmediateObserver`1.ensurereactive()
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs中的System.Reactive.Subjects.ReplaySubject`1.ReplayBase.OnNext(T值)处
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs中的System.Reactive.Subjects.ReplaySubject`1.OnNext(T值)处:第167行
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\observeImpl.AsObservable`1.\uonNext(TSource value)中的System.Reactive.Linq.ObservableImpl.AsObservable`1.\TSource值:第32行
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\DistinctUntilChanged`2.OnNext(TSource value)中的System.Reactive.Linq.Observable\DistinctUntilChanged`2
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\Concat.cs中的System.Reactive.Linq.ObservableImpl.Concat`1.uuuuu.OnNext(TSource值)处:第34行
在System.Reactive.Linq.ObservableImpl.中,在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\Select.cs:第49行中选择'2.Selector.OnNext(TSource值)
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\Scan.cs第50行中的System.Reactive.Linq.ObservableImpl.Scan`2.\uu.OnNext(TSource值)处
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Internal\SafeObserver.cs中的System.Reactive.SafeObserver`1.OnNext(TSource值)处:第50行
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Internal\ScheduledObserver.cs中的System.Reactive.ScheduledObserver`1.Dispatch(ICancelable cancel)处:第93行
位于D:\a\1\s\Rx.NET\Source\src\System.Reactive\Concurrency\Scheduler.c.b\u 73\u 0中的System.Reactive.Concurrency.Scheduler.c.b\u 73\u 0(操作'1A,ICancelable c):第78行
在System.Reactive.Concurrency.DefaultScheduler.LongRunning.c_uu中,在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Concurrency\DefaultScheduler.cs中显示Class1_0`1.b_u0(对象参数):第165行
在D:\a\1\s\Rx.NET\Source\src\System.Reactive\Concurrency\Concurrency\Concurrency-AbstrationLayerImpl.c\uu中显示Class7\u 0.b\u0():第56行
位于System.Threading.ThreadHelper.ThreadStart\u上下文(对象状态)
位于System.Threading.ExecutionContext.RunInternal(ExecutionContext ExecutionContext、ContextCallback回调、对象状态、布尔值preserveSyncCtx)
在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态,布尔保存SyncCTX)
在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态)
位于System.Threading.ThreadHelper.ThreadStart()处
我使用ReactiveCommand是错误的还是它是ReactiveUI中的一个bug


我能够在只使用空方法调用ReactiveCommand的最小WPF应用程序中重现此错误。

我只需要安装ReactiveUI.WPF NuGet包


真的很想为ReactiveUI提供更好的文档。

请显示MyMethod正在做什么,发生此错误是因为您的命令正在工作线程中执行某些操作,您可以尝试传递outputScheduler参数,您可以执行ReactiveCommand.Create(MyMethod,outputScheduler:RxApp.MainThreadScheduler);即使MyMethod为空,它也会引发相同的异常。不幸的是,艾丁
<DataTemplate>
    <Button Content="Press me" 
    Command="{Binding Command, Mode=OneTime}"
    Margin="0,0,5,0"/>
</DataTemplate>
myView.DataContext = new MyViewModel();
  StackTrace:
   at System.Windows.Threading.Dispatcher.VerifyAccess()
   at System.Windows.DependencyObject.GetValue(DependencyProperty dp)
   at System.Windows.Controls.Primitives.ButtonBase.get_Command()
   at System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute()
   at System.Windows.Controls.Primitives.ButtonBase.OnCanExecuteChanged(Object sender, EventArgs e)
   at System.Windows.Input.CanExecuteChangedEventManager.HandlerSink.OnCanExecuteChanged(Object sender, EventArgs e)
   at ReactiveUI.ReactiveCommand.OnCanExecuteChanged()
   at ReactiveUI.ReactiveCommand`2.<.ctor>b__9_6(Boolean _)
   at System.Reactive.AnonymousSafeObserver`1.OnNext(T value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\AnonymousSafeObserver.cs:line 54
   at System.Reactive.Linq.ObservableImpl.RefCount`1._.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\RefCount.cs:line 66
   at System.Reactive.Subjects.FastImmediateObserver`1.EnsureActive(Int32 count) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs:line 893
   at System.Reactive.Subjects.FastImmediateObserver`1.EnsureActive() in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs:line 753
   at System.Reactive.Subjects.ReplaySubject`1.ReplayBase.OnNext(T value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs:line 276
   at System.Reactive.Subjects.ReplaySubject`1.OnNext(T value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs:line 167
   at System.Reactive.Linq.ObservableImpl.AsObservable`1._.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\AsObservable.cs:line 32
   at System.Reactive.Linq.ObservableImpl.DistinctUntilChanged`2._.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\DistinctUntilChanged.cs:line 79
   at System.Reactive.Linq.ObservableImpl.CombineLatest`3._.SecondObserver.OnNext(TSecond value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\CombineLatest.cs:line 189
   at System.Reactive.Linq.ObservableImpl.RefCount`1._.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\RefCount.cs:line 66
   at System.Reactive.Subjects.FastImmediateObserver`1.EnsureActive(Int32 count) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs:line 893
   at System.Reactive.Subjects.FastImmediateObserver`1.EnsureActive() in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs:line 753
   at System.Reactive.Subjects.ReplaySubject`1.ReplayBase.OnNext(T value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs:line 276
   at System.Reactive.Subjects.ReplaySubject`1.OnNext(T value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\ReplaySubject.cs:line 167
   at System.Reactive.Linq.ObservableImpl.AsObservable`1._.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\AsObservable.cs:line 32
   at System.Reactive.Linq.ObservableImpl.DistinctUntilChanged`2._.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\DistinctUntilChanged.cs:line 79
   at System.Reactive.Linq.ObservableImpl.Concat`1._.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\Concat.cs:line 34
   at System.Reactive.Linq.ObservableImpl.Select`2.Selector._.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\Select.cs:line 49
   at System.Reactive.Linq.ObservableImpl.Scan`2._.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Linq\Observable\Scan.cs:line 50
   at System.Reactive.SafeObserver`1.OnNext(TSource value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Internal\SafeObserver.cs:line 50
   at System.Reactive.ScheduledObserver`1.Dispatch(ICancelable cancel) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Internal\ScheduledObserver.cs:line 93
   at System.Reactive.Concurrency.Scheduler.<>c.<ScheduleLongRunning>b__73_0(Action`1 a, ICancelable c) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Concurrency\Scheduler.Simple.cs:line 78
   at System.Reactive.Concurrency.DefaultScheduler.LongRunning.<>c__DisplayClass1_0`1.<ScheduleLongRunning>b__0(Object arg) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Concurrency\DefaultScheduler.cs:line 165
   at System.Reactive.Concurrency.ConcurrencyAbstractionLayerImpl.<>c__DisplayClass7_0.<StartThread>b__0() in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Concurrency\ConcurrencyAbstractionLayerImpl.cs:line 56
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()