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秒标记以查看实际问题)
答案 0 :(得分:1)
我不知道调试如何使用异步方法的详细信息(我不太倾向于使用调试器),但是您需要了解系统将基本上回调到该方法,并从中返回(当调用者首次达到尚未完成的await
表达式时。
我会在bool exists=false;
行上设置一个断点,即在第一个await
表达式后的。然后,您应该能够使用F10(跳过)来遍历循环。
或者,您可以使用LINQ完全摆脱循环:
bool exists = l.Any(sf => string.Equals(sf.Name, "encrypted.txt",
StringComparison.CurrentCultureIgnoreCase));