0

ストア用の単純な Windows 8/RT アプリを作成しようとしていますが、ListBox への項目の追加について質問があります。

私の MainPage には、次のコードがあります。

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        this.brain = new MainController();
        LoadData();
    }
    public void LoadData()
    {
        brain.GetNotesRepoFile().ReadFile();
        Debug(""+brain.GetNotesRepoFile().GetNotesList().Count);
        for(int i = 0; i < brain.GetNotesRepoFile().GetNotesList().Count; i++)
        {
           notesListBox.Items.Add( // code here );
        }
    }
 }


public class NotesRepositoryFile
{
    // CONSTRUCTOR
    public NotesRepositoryFile()
    {
        this.notesRepository = new List<Note>();
    }
    // Read from file
    public async void ReadFile()
    {
        // settings for the file
        var path = @"Files\Notes.txt";
        var folder = Windows.ApplicationModel.Package.Current.InstalledLocation;

        // acquire file
        var file = await folder.GetFileAsync(path);
        var readThis = await Windows.Storage.FileIO.ReadLinesAsync(file);
        foreach (var line in readThis)
        {
            notesRepository.Add(new Note(line.Split(';')[0], line.Split(';')[1]));
            // check if the item was added
            Debug.WriteLine("Added: " + notesRepository[notesRepository.Count - 1].ToString());
        }
        Debug.WriteLine("File read successfully");
    }

}

私の出力は次のとおりです。

0

追加: テスト 1

追加: テスト 2

ファイルが正常に読み取られました

ここでやろうとしているのは、ファイルから文字列を読み取り、Items.Add を使用して listBox に追加することです。しかし、配列のサイズが 0 であるため、項目が正常に追加されても機能しません。

Debug(""+brain.GetNotesRepoFile().GetNotesList().Count); の理由がわかりません。Brain.GetNotesRepoFile().ReadFile(); の前に 実行されます。明らかにそうではないからです。

また、なぜこのソリューションが機能し、上記が機能しないのですか??

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        this.brain = new MainController();
        ReadFile();
    }
    // Read from file
    public async void ReadFile()
    {
        // settings for the file
        var path = @"Files\Notes.txt";
        var folder = Windows.ApplicationModel.Package.Current.InstalledLocation;

        // acquire file
        var file = await folder.GetFileAsync(path);
        var readThis = await Windows.Storage.FileIO.ReadLinesAsync(file);
        foreach (var line in readThis)
        {
            brain.AddNote(line.Split(';')[0], line.Split(';')[1]);
            notesListBox.Items.Add(brain.GetNotesRepoFile().GetNotesList()[brain.GetNotesRepoFile().GetNotesList().Count - 1].ToString());
        }
        Debug.WriteLine("File read successfully");
    }

}

4

1 に答える 1

1

さて、async と await の使い方が間違っているのはあなたのコードです。次のコードに従って変更してください

まず、NotesRepositoryFile クラスで

public async Task<bool> ReadFile()
{
   //Your code
    if (notesRepository.Count > 0) return true;
            return false;
} 

メインページの 2 番目

public async void LoadData()
{
    bool HasNote = await brain.GetNotesRepoFile().ReadFile();

    if (HasNote)
    {
        for (int i = 0; i < brain.GetNotesRepoFile().notesRepository.Count; i++)
        {
                //Your code
        }
    }
 }
于 2012-12-22T12:49:38.723 に答える