调用async方法不设置成员变量
本文关键字:成员 变量 设置 async 方法 调用 | 更新日期: 2023-09-27 18:15:51
这段代码是在visual studio 2012中用c#编写的,我使用的是winrt工具包
嗨,我试着创建这个loadGrupos来捕获文件groupo .txt,并读取和加载他的内容到类Grupos,但我不知道发生了什么,列表Grupos从json接收内容,但当我调用loadGrupos变量Grupos不暴露什么。我真的不知道发生了什么事。我试过调试,没有发现任何错误。
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不能加载文件,有时win8加载有时没有。现在,修改后的应用程序块和做到前面。
如果我用调试的可视化找到文件,如果我只运行没有
应该有关于"未等待调用async方法"(或类似的东西)的警告。
您需要await
来完成async
方法,而不是仅仅调用它。
。廉价和肮脏(不是WinRT的好主意)的方法是调用Task。等待leituraDeUmArquivo
的结果(需要更新方法返回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.