WP8: Связь между фоновым агентом и файлом хранения приложения?

Я пытаюсь написать простое приложение погоды в качестве моего первого приложения. Я должен сохранять как можно меньшее количество http-запросов, поэтому в приложении я использую IsolatedStorageSetting для сохранения запрошенных данных, а также даты и времени последнего запроса. Перед запуском приложения приложение ищет в этом файле вопрос о том, когда был последний запрос, и запускает новый запрос, если прошло 120 минут. Все это прекрасно работает в приложении, но теперь мне нужно реализовать запланированную задачу для обновления живого тайла и экрана блокировки в фоновом режиме. Но перед тем, как фоновый агент запросит данные, он должен посмотреть в этом файле запрос последнего обновления и переписать данные после запроса. Так что мне нужен файл, который может использоваться для чтения и записи приложением и фоновым агентом. Теперь я нуждаюсь в мьютексе и обо мне... но мои вопросы

  1. Какой файл или база данных подходят для этого случая? (isolatedStorgeSettings, isolatedStorgeFile или что-то еще)

  2. где я должен создать этот файл? (внутри MainPage.xaml.cs или мне нужен проект Class Lib.)

  3. как синтаксис для чтения и записи записей в этом файле из приложения и фонового агента?

Хорошо, у меня есть этот пример сейчас, как тест, чтобы шаг за шагом понять тему дыры...

  1. У меня есть библиотека классов "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;
    }
    

    }}

  2. У меня есть само приложение с MainPage.xaml.cs, которое имеет ссылку на DataLib и содержит это:

    используя DataLib;

...

txt_Test.Text = DataLib.DataLib.DatenHolen();

Эта строка выдает ошибку. Я просто не хочу отображать сгенерированную строку в текстовом поле "txt_Test". Где моя ошибка?

2 ответа

Решение
  1. Используйте изолированное хранилище, но не изолированное хранилище. Защитите его с помощью Mutex, и проблем не будет.
  2. Создайте его там, где вам это нужно.
  3. Самый простой способ - это 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, который потребляет довольно много памяти.

Другие вопросы по тегам