C# 在Android或iOS平台内,应使用哪个Rx调度程序来观察主线程?
在特定于平台的项目中使用Rx.NET时C# 在Android或iOS平台内,应使用哪个Rx调度程序来观察主线程?,c#,xamarin,system.reactive,C#,Xamarin,System.reactive,在特定于平台的项目中使用Rx.NET时 安卓 iOS 你如何观察主线程?在使用Xamarin时,iOS或Android下似乎没有提供ObserveOnDispatcher() 这个示例确实有效,因为我知道我在订阅时处于主线程。我只是不知道是否有更正式的方式来处理:“始终”使用主线程,即使我不在主线程上 myObservable // assume this does work on an alternate thread .ObserveOn(SynchronizationContext.C
- 安卓
- iOS
ObserveOnDispatcher()
这个示例确实有效,因为我知道我在订阅时处于主线程。我只是不知道是否有更正式的方式来处理:“始终”使用主线程,即使我不在主线程上
myObservable // assume this does work on an alternate thread
.ObserveOn(SynchronizationContext.Current)
.Subscribe(OnMyObservableNext);
同样,如果我在主线程上,比如在单击事件处理程序中,我知道使用SynchronizationContext.Current
将使我回到该线程。在测试中,我也验证了这一点
不过,我正在寻找的是,我可能不在主线程上,我想回到那里(从PCL)
我可以想出一个解决方案,在应用程序委托的FinishedLaunching
方法中,在静态类上存储SynchronizationContext.Current
。我不知道这是否明智
上面提到的解决方案是这样的:
PCL
namespace MyPCL
{
public static class Settings
{
// obvioulsy probably don't want public setter,
// don't want anyone reaching in here and changiing it
// from under us. But for the example this is fine.
public static SynchronizationContext MainContext { get; set; }
}
}
iOS
using MyPCL;
namespace MyApp.iOS
{
[Register ("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
// ...
Settings.MainContext = SynchronizationContext.Current;
// ^^^^ Save the Main SynchronizationContext
// ...
return true;
}
}
}
抱歉,没有现成的调度器可以使用 你有什么 配合一些注射 这是我在大多数推荐中看到的 或者如果您使用的是Xamarin表单,只需从订阅中使用它即可 这不是最漂亮的事情,但它是有效的 ReactiveUI确实有一些用于访问调度程序线程的自定义调度程序实现
因此,您也可以尝试一下,但我不太确定在SynchronizationContext上使用这些工具的区别/优势
RxApp
需要使用ReactiveUI
包,该包与反应式扩展的v2.x.x相关联。显然,关于只使用ReactiveUI
的利/弊,有一个合理的论据,但在不使用ReactiveUI
的情况下,RxApp.MainThreadScheduler
将不存在。读取失败:-(出于某些原因,我认为你在使用RxUI…让我更新我的答案好吧,很抱歉@AdamVenturella我编辑了我的答案,希望能更有用第一个链接断开了。其他链接没有提供具体的答案。那么推荐的方法是什么?