У меня есть следующий код для открытия базы данных SQLite. Все работает потрясающе, когда я пытаюсь открыть его без фонового работника. Проблема в том, что он загружает большое количество данных, поэтому я хочу бросить его на задний план.База данных SQLite при использовании BackgroundWorker C#
_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. Как мне изменить свой код, чтобы сделать эту работу?
Где вы хранения '_citiesList'? Вы должны использовать результат «BackgroundWorker». – CodingIntrigue
_citiesList - это просто список –
Да, но точка «BackgroundWorker» заключается в том, что вам не нужно использовать статическую переменную. верните свой «Список <>» из метода «DoWork» и получите доступ к нему в «RunWorkerCompleted» с помощью 's.Result' - на данный момент существует вероятность, что ваш SQL-вызов будет перечисляться в вашем завершенном методе – CodingIntrigue