无法单步执行foreach循环

时间:2012-11-02 07:17:00

标签: c# .net

private async void Clicked(object sender, RoutedEventArgs e)
{
    StorageFolder s;
    s = KnownFolders.DocumentsLibrary;
    IReadOnlyList<StorageFile> l = await s.GetFilesAsync();
    bool exists=false;
    foreach (StorageFile sf in l)
    {
        if (string.Equals(sf.Name, "encrypted.txt", StringComparison.CurrentCultureIgnoreCase))
            exists = true;
    }
    MessageDialog d = new MessageDialog(exists.ToString());
    await d.ShowAsync();
}

调试代码时,我无法单步执行foreach循环中的代码

虽然循环结束时存在的值是正确的,但是如果我将MessageDialog代码放在循环中,我可以看到循环执行,任何想法如何正确地进入循环?

即使我把MessageDialog代码放在循环中,我也无法进入if条件,所以我怀疑问题出在那里

编辑:在if条件上设置一个断点(当前我把它放在函数的第一行),但我不能正常使用它进入循环F11如果我一直在逐行调试? (至少它在TurboC中是如何工作的)

EDIT2 :我能想到的最简单的方式来清楚地显示问题:http://www.youtube.com/watch?v=10GgXCqLlVo&feature=youtu.be(跳到25秒标记以查看实际问题)

1 个答案:

答案 0 :(得分:1)

我不知道调试如何使用异步方法的详细信息(我不太倾向于使用调试器),但是您需要了解系统将基本上回调到该方法,并从中返回(当调用者首次达到尚未完成的await表达式时。

我会在bool exists=false;行上设置一个断点,即在第一个await表达式后的。然后,您应该能够使用F10(跳过)来遍历循环。

或者,您可以使用LINQ完全摆脱循环:

bool exists = l.Any(sf => string.Equals(sf.Name, "encrypted.txt",
                              StringComparison.CurrentCultureIgnoreCase));