我的ViewModel中有这个方法:
private async void InicializarModulo(IModuloNeotek modulo)
{
var t = _service.InitializeModuloAsync(DataProvider.NombreInstanciaSqlServer,
modulo, Empresa.NombreEmpresa);
ServiceResult<IModuloNeotek> sResult = await t;
if (sResult.HasErrors)// this never runs
MessageBox.Show("Error");
}
这是我的服务电话:
public async Task<ServiceResult<IModuloNeotek>> InitializeModuloAsync(string dataSource,
IModuloNeotek modulo, string nombreEmpresa)
{
return await Task.Run(() => InitializeModulo(dataSource, modulo, nombreEmpresa));
}
编辑:
public ServiceResult<IModuloNeotek> InitializeModulo(string dataSource, IModuloNeotek modulo, string nombreEmpresa)
{
ServiceResult<IModuloNeotek> sResult;
if (DatabaseExists(dataSource, Strings.GetDbName(nombreEmpresa, modulo.NombreModulo)))
{
sResult = new ServiceResult<IModuloNeotek>(null);
sResult.Error =
string.Format(
"El modulo {0} ya esta inicializado para esta empresa.",
modulo.NombreModulo);
return sResult;
}
SqlQueryResult qResult = new SqlQueryResult();
string connString = GenerateConnectionString(dataSource);
switch (modulo.NombreModulo)
{
case "Contabilidad":
qResult = ExecuteScript(connString, GetScriptStream(TipoModulo.Contabilidad, nombreEmpresa));
if (qResult.Result)
{
string query =
string.Format("INSERT INTO Modulos (NombreModulo, Inicializado, EmpresaId)" +
"VALUES ('{0}', 'true', (SELECT IdEmpresa FROM Empresas WHERE NombreEmpresa=" +
"'{1}')) ", modulo.NombreModulo, nombreEmpresa);
qResult = ExeCuteQuery(query, dataSource, Resources.MaterDbName);
if (qResult.Result)
{
sResult = new ServiceResult<IModuloNeotek>(modulo);
return sResult;
}
}
break;
case "Proveedores":
break;
case "Produccion":
break;
}
sResult = new ServiceResult<IModuloNeotek>(null);
sResult.Error = qResult.Error;
sResult.InnerError = qResult.InnerError;
return sResult;
}
那么,为什么不继续执行呢?我尝试了所有的东西,从服务中返回一个Task并在ViewModel中等待,而不是返回Task.Run
,只是任务,我不知道该做什么,任何线索?感谢
答案 0 :(得分:0)
尝试更改:
private async void InicializarModulo(IModuloNeotek modulo)
为:
private async Task InicializarModulo(IModuloNeotek modulo)
答案 1 :(得分:0)
您的服务电话不正确。它已经awaiting
了。
更新至await
。
private async void InicializarModulo(IModuloNeotek modulo)
{
var t = _service.InitializeModuloAsync(DataProvider.NombreInstanciaSqlServer, modulo, Empresa.NombreEmpresa);
ServiceResult<IModuloNeotek> sResult = await t;
if (sResult.HasErrors)// this never runs
MessageBox.Show("Error");
}
public Task<ServiceResult<IModuloNeotek>> InitializeModuloAsync(string dataSource, IModuloNeotek modulo, string nombreEmpresa)
{
return Task.Run(() => InitializeModulo(dataSource, modulo, nombreEmpresa));
}