繁体   English   中英

使用BackgroundWorker C#时的SQLite数据库

[英]SQLite database when using BackgroundWorker c#

我有以下代码打开一个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中打开它。 我应该如何更改代码以使其正常工作?

我知道这有点老了,但这恰好是google上的首个热门产品。

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

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

Lock将确保您是唯一使用该变量的人。 您,就像在特定方法中一样。 在完成所有其他操作之前,对该变量的所有请求将一直等待,直到锁被清除。

这是一本关于锁如何工作以及在线程情况下应如何使用的好书: https : //msdn.microsoft.com/zh-cn/library/aa645740(v=vs.71).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM