0

https://github.com/Sangeepan/stackoverflow_github(产生此错误的测试项目)

以下代码生成错误:

mscorlib.dll 中出现“System.StackOverflowException”类型的未处理异常

    private async void updateUserlist(String userlist)
    {
        var jsonArray = JArray.Parse(userlist);

        foreach (var jsonobjects in jsonArray)
        {
            var item = jsonobjects["Id"];
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => main_userlist.Items.Add(item));
        }
    }

当我用 Debug.Writeline(item) 替换 await 行时,它工作正常。

4

2 回答 2

1

如果您等待的任务完成得太快并且您有很多项目要处理,则可能会发生这种情况。

让你的async电话更“笨拙”(因此更慢):

private async Task updateUserlistAsync(String userlist)
{
  var jsonArray = JArray.Parse(userlist);
  var jsonobjects = jsonArray.Select(jsonobjects => jsonobjects["Id"]).ToArray();
  await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
  {
    foreach (var item in jsonobjects)
    {
      main_userlist.Items.Add(item);
    }
  });
}
于 2012-11-14T16:15:04.110 回答
0

问题解决了。我需要将 toString() 添加到 json 对象。有时 VS12 中的错误信息会误导您。当我用谷歌搜索 stackoverflow 错误消息时,它都是关于无限循环和线程的。

main_userlist.Items.Add(item.toString());

于 2012-11-15T00:25:38.650 回答