.Net maui Reactiveui: Jobstatemanager с наблюдаемыми обновлениями, не полученными ViewModel своевременноC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 .Net maui Reactiveui: Jobstatemanager с наблюдаемыми обновлениями, не полученными ViewModel своевременно

Сообщение Anonymous »

Проект: .net 9 maui
Пакет: reactiveui.maui, reactiveui.fody, shiny.jobs, shiny.hosting.maui < /p>
У меня есть работа на переднем плане, что Периодически работает как синглтон, он вводит синглтон IcloudtodeviceStateManager, который поддерживает некоторые общие свойства для других услуг. наблюдать. В этом случае, если работа работает или нет. Я ожидаю, что свойство ViewModel Isrunning будет обновлено при каждом изменении, чтобы я мог отобразить активность на странице, которая показывает, что задание работает. Но только когда-либо получал значение завершения задания .. < /p>

Код: Выделить всё

public class CloudToDeviceStateManager : ReactiveObject
{
private readonly BehaviorSubject _isRunningSubject = new BehaviorSubject(false);
public IObservable IsRunningTicks => _isRunningSubject.AsObservable();

public bool IsRunning
{
get => _isRunningSubject.Value;
private set
{
_isRunningSubject.OnNext(value);
this.RaisePropertyChanged();
}
}

public void SetIsRunning(bool isRunning)
{
IsRunning = isRunning;
}
}

public partial class CloudToDeviceSyncJob : IJob
{
private readonly ICloudToDeviceStateManager _stateManager;

[ObservableAsProperty] public bool IsRunning { get; }

public CloudToDeviceSyncJob(ICloudToDeviceStateManager stateManager)
{
_stateManager = stateManager;
}

protected override async Task Run(CancellationToken cancelToken)
{
try
{
_stateManager.SetIsRunning(true);
cancelToken.ThrowIfCancellationRequested();
//... some logic here
}catch(Exception ex) {}
finally
{
_stateManager.SetIsRunning(false);
_logger.LogInformation("CloudToDeviceSyncJob finished");
}
}
}
< /code>
Я вводил этот Statemanager в ViewModel < /p>

public class MainPageViewModel : ViewModelBase
{
private readonly ICloudToDeviceStateManager _stateManager;

[Reactive] public bool IsRunning { get; set; }

public MainPageViewModel(ICloudToDeviceStateManager stateManager)
{
_stateManager = stateManager;

// tried this..
this.WhenAnyValue(x => x._stateManager.IsRunning)
.ObserveOn(RxApp.MainThreadScheduler)
.BindTo(this, x => x.IsRunning);

// tried this
_stateManager.IsRunningTicks.Subscribe(x => IsRunning = x);
}
}
Однако, когда задание выполняется, _statemanager.setisrunning (true); обновляет StateManager, но модель представления не получает это значение. Он только получает ложный сеттер. Я не уверен, что мешает модели представления получить истинное утверждение ..


Подробнее здесь: https://stackoverflow.com/questions/794 ... t-received
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»