Xamarin android Sqlite.net C#如何将同步查询转换为异步任务

时间:2015-11-24 16:19:24

标签: android sqlite asynchronous xamarin async-await

我的xamarin android应用程序有一个方法可以检查sqlite数据库的登录凭据。我对异步任务相当新,并且想知道如何将下面的方法更改为异步方法。

我知道我可以通过等待并将调用方法更改为异步中继命令来轻松地更改对方法的调用,但是如何更改查询方法?

    public static bool CheckLogin(string userName, string password)
    {
        bool valid = false;
        string dbPath = Path.Combine(documentsPath, "..", dbName);
        using (var conn = new SQLite.SQLiteConnection(dbPath))
        {
            try {
               var user = conn.Query<User>("select * from tblUsers where nLogin = ? and nPassword = ?", userName, password);
                if (user.Count>0)
                {
                    valid = true;
                }
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }
        return valid;
    }

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

public static Task<bool> CheckLogin(string userName, string password)
{
    return await Task.Run(delegate{
        bool valid = false;
    string dbPath = Path.Combine(documentsPath, "..", dbName);
    using (var conn = new SQLite.SQLiteConnection(dbPath))
    {
        try {
           var user = conn.Query<User>("select * from tblUsers where nLogin = ? and nPassword = ?", userName, password);
            if (user.Count>0)
            {
                valid = true;
            }
        }
        catch(Exception ex)
        {
            throw ex;
        }
    }
    return valid;
    });
}

这未经过测试,因此可能存在语法错误或其他原因。

bool loginValid = await CheckLogin(user,pass);

但通常这应该做;)

此代码不会阻止调用线程,应该正是您想要的。

我知道你发布了你想要使用SQLiteAsyncConnection,但我认为最好让你自己拥有异步部分代码。

答案 1 :(得分:0)

public async Task<bool> CheckLogin (string userName, string password)
    {
        bool valid = false;
    string dbPath = Path.Combine(documentsPath, "..", dbName);
    using (var conn = new SQLite.SQLiteConnection(dbPath))
    {enter code here
        try {
           var user = conn.Query<User>("select * from tblUsers where nLogin = ? and nPassword = ?", userName, password);
            if (user.Count>0)
            {
                valid = true;
            }
        }
        catch(Exception ex)
        {
            throw ex;
        }
    }
    return valid;
    }

您可以将您的方法称为:

await CheckLogin ("username", "password");