填充ItemsSource时的ListBox和异常

时间:2014-04-22 06:04:41

标签: c# asynchronous listbox async-await windows-phone-8.1

我一直在努力争取自己几个小时的异常(其中两个)我得到了。问题似乎与设备(我使用 Lumia 820 ,调试/发布模式无关紧要)与WP8.1 - 在模拟器上工作正常(我没有测试太多)。跟踪和复制也非常困难 - 所以我add complete code in case somebody wants to try

我有一个 ListBox ,其中填充了一个按钮:

public sealed partial class MainPage : Page
{
    List<string> populationOfItems = new List<string>();
    ObservableCollection<string> itemsToView = new ObservableCollection<string>();

    public MainPage()
    {
        this.InitializeComponent();

        first.Click += first_Click;
        myList.ItemsSource = itemsToView;
        myList.SelectionChanged += myList_SelectionChanged;
        for (int i = 0; i < 6; i++) populationOfItems.Add("Item " + i.ToString());
        BottomAppBar = new CommandBar();
    }

    private void first_Click(object sender, RoutedEventArgs e)
    {
        itemsToView.Clear();
        for (int i = 0; i < 12; i++)
            itemsToView.Add("Example " + i.ToString());
    }

这没关系。然后,当我选择项目时,我想更改我的ObservableCollection:

private async void myList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (myList.SelectedItem != null)
    {
        itemsToView.Clear();
        await PopulateList();
    }
}

private async Task PopulateList()
{
    await Task.Delay(100); // running asynchronous seems to make a problem
    itemsToView.Add("FIRSTELEMENT");
    foreach (var item in populationOfItems)
        itemsToView.Add(item);
}

这就是问题 - 重现的模式:

  • 点击第一个按钮以填充列表框
  • 向下滚动列表框
  • 当Listbox向下移动时(如果没有发生问题,请尝试几次重启)例如,按第9项命中。

我得到以下异常:

First one

什么也很奇怪,过了一会儿(当你用鼠标点击其他地方时)然后再次尝试查看异常 - 它变为:

Second one

问题似乎在某种程度上与Task PopulateList()的异步运行有关(这就是为什么我也标记了这个问题asynchronous) - 如果它在没有行await Task.Delay(100);的情况下运行同步,似乎工作正常。

有人知道会出现什么问题吗?

编辑 - 更多信息

我无法用任何try-catch块捕获异常。

我还尝试通过Dispatcher填充Collection - 但没有成功。

我尝试先填充一个临时List<string>,然后在完成await PopulateList();后,将项目复制到ObservableCollection - 这也没有帮助。

0 个答案:

没有答案
相关问题