WP8:后台代理和应用程序有线存储文件之间的通信?

时间:2014-01-07 10:23:56

标签: c# windows-phone-8 isolatedstorage background-agent

我正在尝试编写一个简单的天气应用程序作为我的第一个应用程序。 我必须保持http请求的数量尽可能低,因此我在应用程序中使用isolatedStorageSetting来保存请求的数据以及上次请求的日期和时间。在应用程序启动请求之前,它会查看此文件以询问最后一个请求的时间,并在120分钟消失时启动新请求。 所有这一切都在应用程序中完美运行,但现在我必须实现一个计划任务来更新背景中的实时图块和锁定屏幕。但是在后台代理请求数据之前,它必须查看此文件以请求上次更新并在请求后重写数据。 所以我需要的是一个可以用于app和后台代理进行读写的文件。我现在需要一个mutex和wo ...但我的问题是

  1. 这种情况的文件或数据库是什么样的? (isolatedStorgeSettings,isolatedStorgeFile或其他)

  2. 我必须在哪里生成这个文件? (在MainPage.xaml.cs中,或者我需要一个类Lib。项目)

  3. 如何从应用和后台代理读取和写入此文件中的条目?

  4. 好的我现在有这个例子,就像逐步了解洞穴话题一样......

    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;

    3. ...

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

      此行产生错误。我只是不会在文本框“txt_Test”中显示生成的字符串。我的错误在哪里?

2 个答案:

答案 0 :(得分:2)

您可以在应用中保存设置,并通过将文件保存到IsolatedStorage,让后台代理可以访问这些设置。我使用JSON.Net来保存和读取文件。我总是将我的设置保存在我的存储的。\ Shared \中。这样我知道我总能访问它。我创建了一个用于存储和读取名为FileStorage的信息的类。使用此课程,您可以非常轻松地保存设置。我将在我的设置中创建一个Save和Load方法,以便可以使用当前信息读取和更新它们。

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");
    }
}

此课程有助于确保我可以毫无问题地访问文件和设置。

我的app和我的后台代理使用IsolatedStorageSettings时取得了成功。我只使用IsolatedStorageSettings,如果内存是一个问题,因为我的另一个解决方案使用JSON.Net消耗了相当多的内存。

答案 1 :(得分:1)

  1. 使用isolatedStorage,but not the isolatedStorageSettings。使用Mutex保护它,不会有任何问题。
  2. 在您需要的地方生成它。
  3. 最简单的方法是XmlSerializer
  4. 2:设置访问权限:

    public new static App Current
    {
        get
        {
            return (App)Application.Current;
        }
    }
    
    static public MySettings mySettings = new MySettings();
    

    现在,您可以通过以下方式访问设置位置:

    App.Current.mySettings.Save() // Load() ... etc.