Проблемы Windows Mobile 6.1 с асинхронным вызовом веб-службы и обновлением пользовательского интерфейса - PullRequest
0 голосов
/ 10 сентября 2009

Я звоню и получаю результаты от вызова асинхронного веб-сервиса, который предоставляет массив объектов для отображения в сетке на портативном устройстве Windows Mobile.

В какой-то момент я правильно обновил интерфейс, используя InvokedRequired и Invoke. Теперь, когда я в первый раз запускаю эмулятор и Visual Studio 2008, он будет работать, но последующие вызовы, кажется, зависают при вызове метода Invoke, и в коде не встречаются другие точки останова.

Это приложение использует .Net CF 2.0 SP1 и предназначено для устройства WinMo 6.1. Недавно я перешел с виртуальной среды разработки под управлением XP на хост-ноутбук с ОС Vista.

private delegate void UpdateGrid(WebServiceItems[] items);

private void DoGridUpdate(WebServiceItems[] items)
    {
        // Choose the correct grid based on the tab index
        DataGrid grid;
        if (tabSelectedIndex == 0)
            grid = gridA;
        else
            grid = gridB;

        if (grid.InvokeRequired)
        {
            grid.Invoke(new UpdateGrid(DoGridUpdate), new object[] { items });

            return;
        }

        Cursor.Current = Cursors.Default;
        grid.DataSource = items;
        if (items.Length > 0)
        {
            DataGridTableStyle tableStyle = new DataGridTableStyle();
            tableStyle.MappingName = items.GetType().Name;

            DataGridTextBoxColumn column = new DataGridTextBoxColumn();
            column.Width = 230;
            column.MappingName = "Column1";
            column.HeaderText = "Column1";
            tableStyle.GridColumnStyles.Add(column);

            column = new DataGridTextBoxColumn();
            column.Width = 70;
            column.MappingName = "Column2";
            column.HeaderText = "Column2";
            tableStyle.GridColumnStyles.Add(column);

            grid.TableStyles.Clear();
            grid.TableStyles.Add(tableStyle);
        }
    }

1 Ответ

1 голос
/ 25 ноября 2009

Я забыл об этом вопросе, но нашел решение. Я пришел из ASP.NET и в то время не понимал, как сохранить сервис в объеме, я удивлен, что он вообще сработал.

Объявление для службы было в событии кнопки onclick, поэтому я переместил его в конструктор формы и сделал службу глобальной для формы, чтобы все методы имели к ней доступ, и теперь все работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...