0

我已经为自己遇到的一个异常(其中两个)苦苦挣扎了几个小时。问题似乎与 WP8.1 的设备(我使用的是Lumia 820,调试/发布模式无关紧要)有关 - 在模拟器上工作正常(我没有进行太多测试)。它也很难跟踪和重现 - 所以我添加完整的代码以防有人想尝试

我有一个列表框,其中填充了一个按钮:

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 向下移动时(如果没有发生问题,请尝试几次重新启动)点击 Item 9。

我得到以下异常:

第一

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

第二个

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

有谁知道可能出了什么问题?

编辑- 更多信息

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

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

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

4

0 回答 0