在Windows应用商店中使用sqlite进行多线程处理

时间:2014-03-06 21:35:42

标签: c# sqlite windows-store-apps

我的Windows商店应用程序有点问题。作为后台任务的问题可以从服务器提取数据并将新数据插入本地数据库,同时用户可以导航到从该数据库拉出的页面,当然应用程序将崩溃,因为数据库是锁定,虽然这是一种罕见的情况,但确实会发生。

所以问题是我可以采取什么方式来解决这个问题,以便一个连接可以等待另一个连接完成或类似的事情,以免彼此冲突?

我正在使用sqlite-net作为我所有东西的sql包装类。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

EkoostikMartin是对的。使用sqlite-net,您可以这样做:

try {
    db.Execute ("PRAGMA journal_mode = WAL;");
} catch (SQLiteException e) {
    if (e.Result != SQLite3.Result.Row)
        throw e;
}

(不确定是否在所有平台上都需要catch,但在WP8上这对我来说是必要的,因为journal_mode PRAGMA返回一行,并且Execute调用在该场景中抛出)

答案 1 :(得分:1)

您应该尝试启用WAL(写入前进记录)模式。它允许并发读写。

http://www.sqlite.org/wal.html

SQLiteConnectionStringBuilder connBuilder = new SQLiteConnectionStringBuilder();
connBuilder.JournalMode = SQLiteJournalModeEnum.Wal;