[英]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.