Приложение застревает при попытке динамического изменения текста метки - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть следующий код, который я вызываю при загрузке страницы:

public StartPage()
{
    NavigationPage.SetHasNavigationBar(this, false);
    InitializeComponent();
    Task.Run(() =>
    {
        Scan_Function();
    });
}

В Scan_Function() у меня есть секундомер и несколько операторов if, которые должны сделатьтекст метки bleText изменяется динамически:

public void Scan_Function()
{
    Stopwatch sw = new Stopwatch();
    sw.Start();
    while (sw.Elapsed.TotalMilliseconds <= 10000)
    {   
        if (sw.Elapsed.TotalMilliseconds >= 1000 && sw.Elapsed.TotalMilliseconds <= 1050)
        {
                bleText.Text = "Scanning.";
        }
        else if (sw.Elapsed.TotalMilliseconds >= 2000 && sw.Elapsed.TotalMilliseconds <= 2050)
        {
                bleText.Text = "Scanning..";
        }
      ....... continues 
    }
        sw.Stop();
        bleText.Text = "Couldn't connect";
        bleText.TextColor = Color.Red;
}

Я вызываю функцию Scan_Function () из Task.Run(), потому что я хочу, чтобы метод выполнялся асинхронно со всем остальным, чтобы пользователь все еще мог нажимать кнопкии т.д.

Моя проблема в том, что ничего не происходит!Я подозреваю, что с bleText.Text что-то не так, потому что мой отладчик доходит до него и, кажется, застревает, ничего не обновляя и не выпрыгивая из цикла.Если я комментирую свои операторы if, он проходит через цикл, но застревает, когда достигает bleText.Text вне цикла.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 25 сентября 2018

Вы не можете обновить пользовательский интерфейс из фонового потока.Используйте BeginInvokeOnMainThread(), чтобы заставить ваш код выполняться в потоке пользовательского интерфейса

Device.BeginInvokeOnMainThread( () => {
    bleText.Text = "Couldn't connect";
    bleText.TextColor = Color.Red;
} );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...