2
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条件が機能する場合にブレークポイントを設定します(現在、関数の1行目に設定しています)が、とにかく行ごとにデバッグしている場合は、F11を使用して通常どおりループにステップインすることはできません。 ?(少なくとも、TurboCではこのように機能しました)

EDIT2:問題を明確に示すために私が考えることができる最も簡単な方法:http ://www.youtube.com/watch?v = 10GgXCqLlVo&feature = youtu.be (実際の問​​題を確認するには25秒のマークにスキップしてください)

4

1 に答える 1

1

デバッグが非同期メソッドでどのように機能するかの詳細はわかりませんが (デバッガーをあまり使用しない傾向があります)、システムが基本的にメソッドから戻ってきて、メソッドにコールバックすることを理解する必要があります (awaitまだ完了していない式に最初に到達したとき。

bool exists=false;行に、つまり最初の式のにブレーク ポイントを置きます。awaitその後、F10 (ステップ オーバー) を使用してループを反復処理できるようになります。

または、LINQ を使用してループを完全に取り除くこともできます。

bool exists = l.Any(sf => string.Equals(sf.Name, "encrypted.txt",
                              StringComparison.CurrentCultureIgnoreCase));
于 2012-11-02T07:23:18.713 に答える