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 将它们添加到列表框中。但由于数组的大小为 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;
} 

主页中的第二个

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 回答