我一直在努力争取自己几个小时的异常(其中两个)我得到了。问题似乎与设备(我使用 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);
}
这就是问题 - 重现的模式:
我得到以下异常:
什么也很奇怪,过了一会儿(当你用鼠标点击其他地方时)然后再次尝试查看异常 - 它变为:
问题似乎在某种程度上与Task PopulateList()
的异步运行有关(这就是为什么我也标记了这个问题asynchronous
) - 如果它在没有行await Task.Delay(100);
的情况下运行同步,似乎工作正常。
有人知道会出现什么问题吗?
编辑 - 更多信息
我无法用任何try-catch块捕获异常。
我还尝试通过Dispatcher
填充Collection - 但没有成功。
我尝试先填充一个临时List<string>
,然后在完成await PopulateList();
后,将项目复制到ObservableCollection
- 这也没有帮助。