Я звоню и получаю результаты от вызова асинхронного веб-сервиса, который предоставляет массив объектов для отображения в сетке на портативном устройстве 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);
}
}