Windows Phone 8.1 中出现未指定错误的 ObservableCollection 和 UnhandledException
ObservableCollection and UnhandledException with unspecified error in Windows Phone 8.1
我有以下代码,如果我删除“Task.Delay”,它会抛出一个带有消息 "Unspecified error" 的 UnhandledException。
这个异常不是从实际代码中抛出的,也不会被任何try catch捕获。
ViewModel Code:
ObservableCollection<Data> _newData;
ObservableCollection<Data> _oldData;
List<Data> dataList = await Task.Run(() => GetData());
foreach(var dataItem in dataList)
{
if(dataItem.Type == DataType.New)
_newData.Add(dataItem);
else
_oldData.Add(dataItem);
await Task.Delay(1); // Comment out and code fails
}
这只会在“dataList”变得足够大时发生。
_newData 和 _oldData 未初始化(null),因此您可能需要实例化它们以查看问题是否仍然存在。
此外,您正在使用 ObservableCollection,所以我猜您将它们绑定到 UI:在将项目添加到集合之前,请确保您不在另一个线程中(使用 Dispatcher)。
原来是一个完全不相关的问题。
用 Flyout
替换 MenuFlyout
解决了问题。我不确定为什么。
我有以下代码,如果我删除“Task.Delay”,它会抛出一个带有消息 "Unspecified error" 的 UnhandledException。 这个异常不是从实际代码中抛出的,也不会被任何try catch捕获。
ViewModel Code:
ObservableCollection<Data> _newData;
ObservableCollection<Data> _oldData;
List<Data> dataList = await Task.Run(() => GetData());
foreach(var dataItem in dataList)
{
if(dataItem.Type == DataType.New)
_newData.Add(dataItem);
else
_oldData.Add(dataItem);
await Task.Delay(1); // Comment out and code fails
}
这只会在“dataList”变得足够大时发生。
_newData 和 _oldData 未初始化(null),因此您可能需要实例化它们以查看问题是否仍然存在。
此外,您正在使用 ObservableCollection,所以我猜您将它们绑定到 UI:在将项目添加到集合之前,请确保您不在另一个线程中(使用 Dispatcher)。
原来是一个完全不相关的问题。
用 Flyout
替换 MenuFlyout
解决了问题。我不确定为什么。