Форум программистов, компьютерный форум CyberForum.ru

Программирование Windows Phone

Войти
Регистрация
Восстановить пароль
 
Монфрид
 Аватар для Монфрид
1188 / 998 / 153
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
#1

Виснет ui при использовании await - Windows Phone

16.10.2014, 19:37. Просмотров 469. Ответов 4
Метки нет (Все метки)

Использую mvvm.
Есть vm, в ней есть свойство Products (коллекция observable), к ней прибинден элемент на интерфейсе. Есть команды, при запуске команд, я ищу данные в бд, и вставляю их в Products. Команды используют асинхронные методы получения данных. Не смотря на это, виснет интерфейс. Что не так делаю?
C#
1
2
3
4
5
6
7
 private async void NextPage_Method()
        {
            TogglePreloaderShowed();
            CurrenSkip += _recordsOnPage;
            PrevPageCommand.RaiseCanExecuteChanged();
            Products.Reset(await _dbManager.GetProductsByNameAsync(SearchText, CurrenSkip, _recordsOnPage));//пока не получатся данные, интерфейс не реагирует.
         }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Defazze
 Аватар для Defazze
163 / 110 / 25
Регистрация: 18.09.2014
Сообщений: 167
16.10.2014, 20:34     Виснет ui при использовании await #2
Монфрид, может, дело в реализации GetProductsByNameAsync?
Монфрид
 Аватар для Монфрид
1188 / 998 / 153
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
16.10.2014, 20:59  [ТС]     Виснет ui при использовании await #3
Цитата Сообщение от Defazze Посмотреть сообщение
может, дело в реализации GetProductsByNameAsync?
вот так там:
C#
1
2
3
4
5
6
7
8
9
10
11
public async Task<List<ProductSearch>> GetProductsByNameAsync(string productName, int skip, int take)
        {
            return await Task.Factory.StartNew<List<ProductSearch>>(() =>
                {
                    string query = !string.IsNullOrEmpty(productName) ? string.Format("select * from ProductSearch where ProductName match '{0}*' limit {1},{2}", productName, skip, take) : string.Format("select * from ProductSearch limit {0},{1}", skip, take);
                    using (var context = new SQLite.SQLiteConnection(_connectionString))
                    {
                        return context.Query<ProductSearch>(query).OrderBy(x => x.ProductName).ToList();
                    }
                });
        }
может дело в том, что это винфон8, и там свои особенности распараллеливания..
Defazze
 Аватар для Defazze
163 / 110 / 25
Регистрация: 18.09.2014
Сообщений: 167
16.10.2014, 21:28     Виснет ui при использовании await #4
Если просто вернуть Task, то не должен виснуть:
C#
1
2
3
4
5
6
7
8
9
10
11
public Task<List<ProductSearch>> GetProductsByNameAsync(string productName, int skip, int take)
        {
            return Task.Factory.StartNew<List<ProductSearch>>(() =>
                {
                    string query = !string.IsNullOrEmpty(productName) ? string.Format("select * from ProductSearch where ProductName match '{0}*' limit {1},{2}", productName, skip, take) : string.Format("select * from ProductSearch limit {0},{1}", skip, take);
                    using (var context = new SQLite.SQLiteConnection(_connectionString))
                    {
                        return context.Query<ProductSearch>(query).OrderBy(x => x.ProductName).ToList();
                    }
                });
        }
Монфрид
 Аватар для Монфрид
1188 / 998 / 153
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
16.10.2014, 21:49  [ТС]     Виснет ui при использовании await #5
Цитата Сообщение от Defazze Посмотреть сообщение
то не должен виснуть
попробовал. Всё равно так же виснет(
Yandex
Объявления
16.10.2014, 21:49     Виснет ui при использовании await
Ответ Создать тему
Опции темы

Текущее время: 22:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru