Sqlite.net异步-如何在Xamarin中使用?

FetFrumos

我为Android和Windows Phone创建了一个应用。对于数据访问,我正在使用sqllite.net异步。我使用PCL库,Xamarin Android项目和Windows Phone 8 silverligth项目创建了简单的示例解决方案。这是我在PCL中的DataService:

public  class DataService
{
     private SQLiteAsyncConnection _dbConnection;
     public DataService(ISQLitePlatform platform, string path)
    {
        var connectionFactory = new Func<SQLiteConnectionWithLock>
                (() => new SQLiteConnectionWithLock(platform, new     SQLiteConnectionString(path, true)));
        _dbConnection = new SQLiteAsyncConnection(connectionFactory);
    }
    public async Task Initialize()
    {
        await _dbConnection.CreateTableAsync<ToDo>().ContinueWith(t =>
        {
           Debug.WriteLine("Create");
        });
    }
    public async Task<int> AddNewToDo(ToDo item)
    {
        var result = await _dbConnection.InsertAsync(item);
        return result;
    } 

    public async Task<List<ToDo>> GetAllToDos()
    {
        var result = await _dbConnection.Table<ToDo>().OrderByDescending(t => t.TimeStamp).ToListAsync();
        return result;
    }
    ....
  }

这在Windows Phone中使用:

    private async void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        var db = new DataService(new SQLitePlatformWP8(), "my.db");
        await db.Initialize();
        await db.AddNewToDo(new ToDo {Text = "Hello world"});
        var items = await db.GetAllToDos();
        Debug.WriteLine("Count - {0}",items.Count);
    } 

Windows Phone中的输出:

Create
Count - 1

没关系。调试是可行的。

这是在Xamarin Android中使用的:

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        // Get our button from the layout resource,
        // and attach an event to it
        Button button = FindViewById<Button>(Resource.Id.MyButton);

        button.Click += delegate
        {
            TestDb();
        };
    }

    private async void TestDb()
    {
        string documentsPath =        System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
        var path = Path.Combine(documentsPath, "my.db");
        var db = new DataService(new SQLitePlatformAndroid(), path);
        await db.Initialize();
        await db.AddNewToDo(new ToDo { Text = "Hello world" });
        var items = await db.GetAllToDos();
        Console.WriteLine("count - {0}",items.Count);
    }

输出:

 [0:] 
 Create
 [0:] Create
 02-18 00:46:01.167 I/mono-stdout(19234): Create
 count - 1
 02-18 00:46:01.675 I/mono-stdout(19234): count - 1

为什么多次调用?调试不起作用。当我停止等待代码时,下一步就是退出该方法,而不会碰到我的回叫或其他任何东西。

这是一个简单的例子,我不明白为什么会这样。也许我做错了。

热塞里诺

您的代码有问题:

button.Click += delegate
{
    TestDb();
};

TestDb是一个异步方法,您无需即可异步调用它await

TestDb离开Click事件代码后,to的调用将发生

我建议您await拨打电话:

button.Click += async delegate
{
    await TestDb();
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Xamarin Forms PCL中的事务中使用SQLITE异步扩展?

来自分类Dev

使用sqlite-net +异步时设置Sqlite ThreadingMode

来自分类Dev

如何在sqlite.net PCL中使用InsertOrReplace?

来自分类Dev

如何在.NET Standard库中使用Sqlite?

来自分类Dev

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

来自分类Dev

如何在MainPage()(Xamarin Forms)中使用异步

来自分类Dev

如何在 android xamarin 中更新 sqlite.net

来自分类Dev

尝试在 Xamarin 中使用 SQLite 执行异步操作时应用程序挂起

来自分类Dev

如何从SQLite的异步PCL版本使用SQLiteAsyncConnection?

来自分类Dev

如何以 xamarin 形式使用 SQLite-Net-PCL?

来自分类Dev

异步使用WinSCP .NET

来自分类Dev

如何在sqlite中使用外键?

来自分类Dev

如何在SQLite中使用删除功能

来自分类Dev

如何在sqlite中使用if语句

来自分类Dev

如何在sqlite中使用外键?

来自分类Dev

如何在Android中使用外部Sqlite

来自分类Dev

如何在Android中使用SQLite?

来自分类Dev

在WinRT中使用SQLite-Net扩展

来自分类Dev

在WinRT中使用SQLite-Net扩展

来自分类Dev

在C#中将SQLite与异步配合使用

来自分类Dev

如何在.NET中将SQLite与NLog一起使用

来自分类Dev

sqlite-net异步API支持处置吗?

来自分类Dev

sqlite-net异步API支持处置吗?

来自分类Dev

无法从SQLite.Net异步PCL获取项目

来自分类Dev

如何在targeting.net 4.0项目中使用异步关键字

来自分类Dev

如何在.NET 4.0中使用Microsoft.Bcl.Async在TransactionScope中支持异步方法?

来自分类Dev

如何在Rx.Net中使用异步累加器实现ScanAsync运算符?

来自分类Dev

在ASP.Net MVC中使用异步

来自分类Dev

在 ASP.Net-MVC 中使用异步

Related 相关文章

热门标签

归档