使用 BackgroundWorker c# 时的 SQLite 数据库

本文关键字:SQLite 数据库 时的 BackgroundWorker 使用 | 更新日期: 2023-09-27 18:32:03

我有以下代码来打开SQLite数据库。当我尝试在没有后台工作者的情况下打开它时,一切都很棒。问题是,它加载了大量数据,所以我想把它扔到后台。

_worker = new BackgroundWorker();
_worker.DoWork += ((s, x) =>
{
     _citiesList = new ObservableCollection<City>();
     _citiesList = (Application.Current as App).db.SelectCityCollectionCollection(selectString);
});
_worker.RunWorkerCompleted += ((s, x) =>
{
    LocationClearText.Visibility = Visibility.Visible;
    SearchCityPromptList.ItemsSource = _citiesList.Select(p => p).Where(p => p.cityName.StartsWith(CitySearchBox.Text) || p.flatCityName.StartsWith(CitySearchBox.Text)).Take(30);
});
_worker.RunWorkerAsync();

引发的错误是"无法打开数据库文件:myDatabase.sqlite"。

就像我说的,一切都很好,直到我尝试在后台工作者中打开它。我应该如何更改我的代码才能使其正常工作?

使用 BackgroundWorker c# 时的 SQLite 数据库

我知道

这有点旧了,但它恰好是谷歌上的第一个热门。

在这种情况下,最好的办法是..

lock(connection)
{
  connection.open();
  DoStuff(connection);
}

锁定将确保您是唯一使用该变量的人。 你,就像在,具体方法。 在它完成之前,对变量的所有其他请求将等待,直到锁定清除。

以下是关于锁如何工作以及在线程情况下应该使用的很好的阅读:https://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx