Data binding WPF中的ReactiveCommand引发Subscribe异常

Data binding WPF中的ReactiveCommand引发Subscribe异常,data-binding,reactiveui,Data Binding,Reactiveui,我有一个带有ReactiveUI的简单演示应用程序: //在viewmodel中 类MainViewModel:ReactiveObject { public ReactiveUI.ReactiveCommand MyReactiveCommand{get;} 公共主视图模型() { MyReactiveCommand=ReactiveCommand.Create(()=>{MessageBox.Show(“Hello”);},outputScheduler:RxApp.MainThreadSc

我有一个带有ReactiveUI的简单演示应用程序:

//在viewmodel中
类MainViewModel:ReactiveObject
{
public ReactiveUI.ReactiveCommand MyReactiveCommand{get;}
公共主视图模型()
{
MyReactiveCommand=ReactiveCommand.Create(()=>{MessageBox.Show(“Hello”);},outputScheduler:RxApp.MainThreadScheduler);
}
}
在XAML视图中


当您按下按钮时,应该会出现一个消息框,但我得到以下错误:

System.InvalidOperationException:'调用线程无法访问 此对象是因为拥有它的线程不同。”

我试着返回一个值,然后像Glenn建议的那样订阅,但也有同样的问题。至少使用此代码,消息框会在崩溃之前打开;)

public类MainViewModel:ReactiveObject
{
public ReactiveCommand MyReactiveCommand{get;}
公共主视图模型()
{
MyReactiveCommand=ReactiveCommand.CreateFromObservable(剂量测量);
订阅(x=>{MessageBox.Show(“Hello”);});
}
公共可观测剂量测量()
{
返回可观察的.Start(()=>{});
}
}

所以有几件事需要注意
ReactiveCommand.CreateFromObservable
有一个名为
outputScheduler
的参数,这将是订阅输出的目的地。您可以在此处传递
RxApp.MainThreadScheduler

public类MainViewModel:ReactiveObject
{
public ReactiveCommand MyReactiveCommand{get;}
公共主视图模型()
{
MyReactiveCommand=ReactiveCommand.CreateFromObservable(剂量测量,outputScheduler:RxApp.MainThreadScheduler);
订阅(x=>{MessageBox.Show(“Hello”);});
}
公共可观测剂量测量()
{
返回可观察的.Start(()=>{});
}
}

注意:还要确保已安装NuGet软件包
ReactiveUI.WPF

ReactiveCommand.Create默认情况下在单独的线程上运行。您可以传递到调度程序参数RxApp.MainThreadScheduler以覆盖该参数。另外,如果您在Create中返回一个值,那么Subscribe默认情况下将在主线程上返回。使用
ReactiveUI.WPF
而不是
ReactiveUI
修复了它。