0

このコードは、Visual Studio 2012 の C# で記述されています。winrt ツール キットを使用しています。

こんにちは、このloadGruposを作成して、ファイルgrupo.txtをキャッチし、彼のコンテンツを読み取ってクラスGruposにロードしようとしましたが、リストのグループがjsonからコンテンツを受け取りますが、loadGruposを呼び出すと、変数グループは何も公開しません。何が起こっているのか本当にわかりません。デバッグを試みましたが、エラーは見つかりませんでした。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Newtonsoft.Json;
    using Windows.Storage;
    using Windows.ApplicationModel;
    using WinRTXamlToolkit.IO.Extensions;
    using Windows.UI.Popups;
    namespace xxx;
    public class MyJConverter
    {

    public String _Path;
    //private Windows.ApplicationModel.Package package;
    //   private Windows.Storage.StorageFolder installedLocation;
    private StorageFolder _Folder = Windows.Storage.ApplicationData.Current.LocalFolder;
    //KnownFolders.DocumentsLibrary
    public MyJConverter() {
    //  package = Windows.ApplicationModel.Package.Current;
    //   installedLocation = package.InstalledLocation;
    }

    public void save(Object obj)
    {
    _Path = JsonConvert.SerializeObject(obj);

    gravandoUmDocumento("data",_Path);

    }
    public void saveGrupo(Object obj)
    {

    _Path = JsonConvert.SerializeObject(obj);

    gravandoUmDocumento("grupo", _Path);

    }



    public async void gravandoUmDocumento(String nomeDoArquivo,String menssagem) {




    //  var _Folder = Windows.Storage.ApplicationData.Current.LocalFolder;
    // var _Folder  = Windows.ApplicationModel.Package.Current.InstalledLocation;
    //await menssagem.WriteToFile(nomeDoArquivo + "1.txt", KnownFolders.DocumentsLibrary);
    await menssagem.WriteToFile(nomeDoArquivo + ".txt", _Folder);
    }
        private List<Ano> anos;

 public List<Ano> load()
 {
        leituraDeUmArquivo("data").Wait();
 if (anos != null)
 {        
    return anos;

 }
 return null;
     }


private List<Grupos> grupos;

public List<Grupos> Grupos
    {
    get { return grupos; }
    set { grupos = value; }
    }

    public List<Grupos> loadGrupos()
    {
       leituraDeUmArquivo("grupo").Wait();

        {
            if (grupos != null)
            {

                return grupos;   
            }
            else
                return null;
        }


    }
    public async Task leituraDeUmArquivo(String arquivoASerLido)
    {
    String leitura = "";
    //leitura do data
    try
    {
    // settings

    var _Path =arquivoASerLido + ".txt";
    // acquire file
    var _File = await _Folder.GetFileAsync(_Path);


    // read content
    leitura = (String) await Windows.Storage.FileIO.ReadTextAsync(_File);
    //    leitura = (String)_ReadThis;
    }
    catch {
    //     leituraDeUmArquivo(arquivoASerLido);
    }

    if (leitura != "")
    {
            if (arquivoASerLido.Equals("data"))
            {
                    try
            {
                    anos = JsonConvert.DeserializeObject<List<Ano>>(leitura);
            }
            catch { 

            }
            }
            if (arquivoASerLido.Equals("grupo"))
            {
                    try{
                    grupos = JsonConvert.DeserializeObject<List<Grupos>>(leitura);
                }
                    catch { }

            }

        }


    }

}

こんにちは、お勧めの変更を行いましたが、問題が解決しなかったため、すべてのコードを投稿します。なぜwinrtがファイルを読み込めないのか、本当にわかりませんでした。変更により、アプリはブロックされ、前面に移動します。

ビジュアルをデバッグすると、ファイルが見つかりました。

4

1 に答える 1

3

「待機せずに非同期メソッドを呼び出す」(またはこのようなもの)に関する警告が表示されるはずです。

メソッドを呼び出すだけでなくawait、メソッドを完了する必要があります。async

つまり、安価で汚い (WinRT には適していません) アプローチは、次の結果でTask.WaitleituraDeUmArquivoを呼び出すことです(メソッドを更新して返す必要がありますTask)。

leituraDeUmArquivo("grupo").Wait();

より良いアプローチは、コードを適切に非同期にし、単にawait呼び出すことですleituraDeUmArquivo(loadGrupos関数もマークして適切に処理する必要がある可能性がありasyncます)。

注: 作るawait/.Wait()作業するにleituraDeUmArquivoは を返す必要がありTaskます。

public async Task leituraDeUmArquivo(String arquivoASerLido)
// don't need to touch body of the method.
于 2013-05-28T06:39:08.463 に答える