Rx.NET回调完再直接调用函数
Rx.NET Call function again direct after all it's callbacks
我想与串行端口进行通信 - 获取一些数据。我想尽可能快地循环获取这些数据。因此,我有带回调的函数 GetData(),它在 WPF 表单上绘制数据。如何在所有回调之后立即在循环中调用此 GetData 函数?
喜欢循环GetData->Draw->GetData->Draw之类的?
更新:Mb 是这样的吗?
var ob = Observable.Create<Data>(
observer => {
while(true) {
observer.OnNext(GetDataFromSerialPort());
}
});
我会创建一个服务,通过可观察的序列公开串口数据。然后我会将其注入我的 MVVM 堆栈。
该服务与您所拥有的类似,但具有处置功能
public class MySerialPortService : IsCancellationRequested
{
public IObservable<Data> GetData()
{
return Observable.Create<Data>(async (o, cts) =>
observer => {
while (!cts.IsCancellationRequested) {
observer.OnNext(GetDataFromSerialPort());
}
});
}
}
public class MyViewModel : IDisposable
{
private readonly IMySerialPortService _mySerialPortService;
private readonly ISchedulerProvider _schedulerProvider;
private readonly SingleAssignmentDisposable _subscription = new SingleAssignmentDisposable();
public MyViewModel(IMySerialPortService mySerialPortService, ISchedulerProvider schedulerProvider)
{
_mySerialPortService = mySerialPortService;
_schedulerProvider = schedulerProvider;
}
public void Start()
{
_subscription.Disposable = _mySerialPortService.GetData()
.SubscribeOn(_schedulerProvider.Background) //or _schedulerProvider.ThreadPool, or CreateEventLoopScheduler or what ever you do internally.
.ObserveOn(_schedulerProvider.Foreground) //or _schedulerProvider.Dispatcher etc...
.Subscribe(
val=> Update(val),
ex=> ...
)
}
public void Dispose()
{
_subscription.Dispose();
}
}
以下 post 可能会有帮助 - https://github.com/LeeCampbell/RxCookbook/tree/master/IO/Disk。它逐步向您展示了如何创建和从磁盘读取的可观察序列。您可以将磁盘 IO 换成串行端口 IO。
我想与串行端口进行通信 - 获取一些数据。我想尽可能快地循环获取这些数据。因此,我有带回调的函数 GetData(),它在 WPF 表单上绘制数据。如何在所有回调之后立即在循环中调用此 GetData 函数?
喜欢循环GetData->Draw->GetData->Draw之类的?
更新:Mb 是这样的吗?
var ob = Observable.Create<Data>(
observer => {
while(true) {
observer.OnNext(GetDataFromSerialPort());
}
});
我会创建一个服务,通过可观察的序列公开串口数据。然后我会将其注入我的 MVVM 堆栈。
该服务与您所拥有的类似,但具有处置功能
public class MySerialPortService : IsCancellationRequested
{
public IObservable<Data> GetData()
{
return Observable.Create<Data>(async (o, cts) =>
observer => {
while (!cts.IsCancellationRequested) {
observer.OnNext(GetDataFromSerialPort());
}
});
}
}
public class MyViewModel : IDisposable
{
private readonly IMySerialPortService _mySerialPortService;
private readonly ISchedulerProvider _schedulerProvider;
private readonly SingleAssignmentDisposable _subscription = new SingleAssignmentDisposable();
public MyViewModel(IMySerialPortService mySerialPortService, ISchedulerProvider schedulerProvider)
{
_mySerialPortService = mySerialPortService;
_schedulerProvider = schedulerProvider;
}
public void Start()
{
_subscription.Disposable = _mySerialPortService.GetData()
.SubscribeOn(_schedulerProvider.Background) //or _schedulerProvider.ThreadPool, or CreateEventLoopScheduler or what ever you do internally.
.ObserveOn(_schedulerProvider.Foreground) //or _schedulerProvider.Dispatcher etc...
.Subscribe(
val=> Update(val),
ex=> ...
)
}
public void Dispose()
{
_subscription.Dispose();
}
}
以下 post 可能会有帮助 - https://github.com/LeeCampbell/RxCookbook/tree/master/IO/Disk。它逐步向您展示了如何创建和从磁盘读取的可观察序列。您可以将磁盘 IO 换成串行端口 IO。