WP8: Связь между фоновым агентом и файлом хранения приложения?
Я пытаюсь написать простое приложение погоды в качестве моего первого приложения. Я должен сохранять как можно меньшее количество http-запросов, поэтому в приложении я использую IsolatedStorageSetting для сохранения запрошенных данных, а также даты и времени последнего запроса. Перед запуском приложения приложение ищет в этом файле вопрос о том, когда был последний запрос, и запускает новый запрос, если прошло 120 минут. Все это прекрасно работает в приложении, но теперь мне нужно реализовать запланированную задачу для обновления живого тайла и экрана блокировки в фоновом режиме. Но перед тем, как фоновый агент запросит данные, он должен посмотреть в этом файле запрос последнего обновления и переписать данные после запроса. Так что мне нужен файл, который может использоваться для чтения и записи приложением и фоновым агентом. Теперь я нуждаюсь в мьютексе и обо мне... но мои вопросы
Какой файл или база данных подходят для этого случая? (isolatedStorgeSettings, isolatedStorgeFile или что-то еще)
где я должен создать этот файл? (внутри MainPage.xaml.cs или мне нужен проект Class Lib.)
как синтаксис для чтения и записи записей в этом файле из приложения и фонового агента?
Хорошо, у меня есть этот пример сейчас, как тест, чтобы шаг за шагом понять тему дыры...
У меня есть библиотека классов "DataLib", которая содержит это:
Пространство имен DataLib {открытый класс DataLib {
public static string DatenHolen(string DatenPacket) { IsolatedStorageFile WetterDatenDatei = IsolatedStorageFile.GetUserStoreForApplication(); try { //Create == Create OR Overwrite IsolatedStorageFileStream myStream = new IsolatedStorageFileStream("datei1.txt", System.IO.FileMode.Create, WetterDatenDatei); StreamWriter writer = new StreamWriter(myStream); writer.Write("Inhalt der Datei"); writer.Close(); } catch (Exception) { MessageBox.Show("Fehler beim Schreiben der Datei"); } try { IsolatedStorageFileStream myStream = new IsolatedStorageFileStream("datei1.txt", System.IO.FileMode.Open, WetterDatenDatei); StreamReader reader = new StreamReader(myStream); DatenPacket = reader.ReadToEnd(); reader.Close(); } catch (Exception) { MessageBox.Show("Fehler beim Auslesen der Datei"); } return DatenPacket; }
}}
У меня есть само приложение с MainPage.xaml.cs, которое имеет ссылку на DataLib и содержит это:
используя DataLib;
...
txt_Test.Text = DataLib.DataLib.DatenHolen();
Эта строка выдает ошибку. Я просто не хочу отображать сгенерированную строку в текстовом поле "txt_Test". Где моя ошибка?
2 ответа
- Используйте изолированное хранилище, но не изолированное хранилище. Защитите его с помощью Mutex, и проблем не будет.
- Создайте его там, где вам это нужно.
- Самый простой способ - это XmlSerializer.
2: настройки доступа:
public new static App Current
{
get
{
return (App)Application.Current;
}
}
static public MySettings mySettings = new MySettings();
Теперь вы можете получить доступ к урегулированию, где вы хотите:
App.Current.mySettings.Save() // Load() ... etc.
Вы можете сохранить настройки в своем приложении и сделать их доступными для фонового агента, сохранив файл в IsolatedStorage. Я использую JSON.Net, чтобы сохранить и прочитать файл. Я всегда сохраняю свои настройки в. \ Shared \ моего хранилища. Таким образом, я знаю, что всегда могу получить к нему доступ. Я создал класс для хранения и чтения этой информации под названием FileStorage. Используя этот класс, вы можете сохранить свои настройки довольно легко. Я создам метод Сохранить и Загрузить в моих настройках, чтобы они могли быть прочитаны и обновлены с текущей информацией.
public class AppSettings
{
public bool SomeProp { get; set; }
public double AnotherProp { get; set;}
public void Save()
{
FileStorage.WriteSharedData("Settings.txt", this);
}
public static AppSettings Load()
{
return FileStorage.ReadSharedData<AppSettings>("Settings.txt");
}
}
Этот класс помогает обеспечить доступ к файлу и настройкам без каких-либо проблем.
У меня был успех при использовании IsolatedStorageSettings для моего приложения и для моего фонового агента. Я использую IsolatedStorageSettings только в том случае, если память представляет собой проблему, поскольку мое другое решение использует JSON.Net, который потребляет довольно много памяти.