Я использую Prism Unity для приложения для управления запасами со сканером Bluetooth.Сначала я использовал сканер в режиме HID, но после того, как сканер находился в спящем режиме, инициализация HID была мучительно медленной.Поэтому я решил использовать Bluetooth SPP, который работает намного лучше.Но я запускаю эту ошибку и не могу понять, почему она не работает.
Служба Bluetooth работает в фоновом режиме и запускает событие, на которое подписан мой ViewModel.Затем вызывается функция, которая проверяет штрих-код и, в случае успеха, переходит на другую страницу.
Когда вы вводите штрих-код вручную, вызывается та же функция для проверки и навигации.Интересные части кода ниже:
Конструктор ViewModel с подпиской на событие штрих-кода:
public ArtikelScannenPageViewModel(INavigationService navigationService, IPageDialogService pageDialog, IEventAggregator eventAggregator)
: base(navigationService)
{
Title = "Artikel scannen";
_navigationService = navigationService;
_pageDialog = pageDialog;
_eventAggregator = eventAggregator;
SubmitCommand = new DelegateCommand(OnSubmit);
System.Diagnostics.Debug.WriteLine("BTDevice:" + (string)App.Current.Properties["BTDevice"]);
_eventAggregator.GetEvent<ScannerEvent>().Subscribe(OnBarcode);
}
Вызывается при сканировании штрих-кода:
private IEventAggregator _eventAggregator;
void OnBarcode(string param)
{
checkArtikel(param);
}
Thisвызывается, когда штрих-код вводится вручную:
public DelegateCommand SubmitCommand { protected set; get; }
public async void OnSubmit()
{
if (!string.IsNullOrEmpty(Artikelnr))
{
checkArtikel(Artikelnr);
}
else
{
await _pageDialog.DisplayAlertAsync("Eingabe", "Bitte Artikelnummer eingeben!", "OK");
}
}
Оба, OnSubmit и OnBarcode, используют эту функцию:
public async void checkArtikel(string _barcode)
{
DataOperations dop = new DataOperations();
APIOperations.ValidationResponse vr = await dop.GetArtikel(_barcode);
if (vr.Successful)
{
Artikel artikel = (Artikel)vr.Response;
NavigationParameters p = new NavigationParameters();
p.Add("artikel", artikel);
await _navigationService.NavigateAsync(_nextPage, p);
System.Diagnostics.Debug.WriteLine("Navigation fired!");
}
else
{
await _pageDialog.DisplayAlertAsync("Fehler", "Falsche Artikel-Nr. oder Artikel tot!", "OK");
}
}
Когда он вводится вручную, все работает нормально.Но когда вызывается OnBarcode, навигация не работает!Это просто остается на странице.Функция checkArtikel вызывается.DataOperation возвращает правильный «Артикель» и даже «Навигация сработала!»появляется в журнале.Как это могло быть возможно?Я немного использую ту же функцию?Что мне здесь не хватает?
Редактировать: опечатка