在我的WP7应用程序中,用户可以将mesage发送到连接的某个服务器。
为此,我有一个名为" msgBox"。
的文本框按钮" sendBtn"它将用msgBox编写的文本发送到服务器。
我想保存最后20条发送消息,不超过这个。
就像第21个消息传递一样,第1个消息被删除,第2个消息变成第1个消息......
并且新的msg成为第20个已保存的消息。
我不太熟悉隔离存储,非常基础的知识。
我无法弄清楚如何做到这一点。
如果有人可以帮助我,我将非常感激。
答案 0 :(得分:1)
您所描述的行为符合Queue。但.Net Queue的问题在于它无法直接保存到隔离存储(序列化问题)。由于你只有20个元素就足以使用一个列表而只删除第一个元素。
private List<string> messages = new List<string>(MAX_ITEMS);
private const int MAX_ITEMS = 20;
private void userAddMessege(string message)
{
messages.Add(message);
if (messages.Count > MAX_ITEMS)
{
messages.RemoveAt(0);
}
}
我假设您要使用IsolatedStorage,因为您希望在用户退出应用程序时保存邮件并恢复用户返回的邮件。我使用一个简单的包装器
using System;
using System.Net;
using System.Windows;
using System.IO.IsolatedStorage;
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace YourProjectNamespace
{
public class AppSettings
{
// Isolated storage settings
private IsolatedStorageSettings m_isolatedStore;
public AppSettings()
{
try
{
// Get the settings for this application.
m_isolatedStore = IsolatedStorageSettings.ApplicationSettings;
}
catch (Exception e)
{
MessageBox.Show("Exception while using IsolatedStorageSettings: " + e.ToString());
}
}
/// <summary>
/// Update a setting value for our application. If the setting does not
/// exist, then add the setting.
/// </summary>
/// <param name="Key">Key to object</param>
/// <param name="value">Object to add</param>
/// <returns>if value has been changed returns true</returns>
public bool AddOrUpdateValue(string Key, Object value)
{
bool valueChanged = false;
try
{
if (m_isolatedStore.Contains(Key))
{
// if new value is different, set the new value.
if (m_isolatedStore[Key] != value)
{
m_isolatedStore[Key] = value;
valueChanged = true;
}
}
else
{
m_isolatedStore.Add(Key, value);
valueChanged = true;
}
}
catch (ArgumentException)
{
m_isolatedStore.Add(Key, value);
valueChanged = true;
}
catch (Exception e)
{
MessageBox.Show("Exception while using IsolatedStorageSettings: " + e.ToString());
}
return valueChanged;
}
/// <summary>
/// Get the current value of the setting, or if it is not found, set the
/// setting to an empty List.
/// </summary>
/// <typeparam name="valueType"></typeparam>
/// <param name="Key"></param>
/// <returns></returns>
public List<DefType> GetListOrDefault<DefType>(string Key)
{
try
{
if (m_isolatedStore.Contains(Key))
{
return (List<DefType>)m_isolatedStore[Key];
}
else
{
return new List<DefType>();
}
}
catch (ArgumentException)
{
return new List<DefType>();
}
catch (Exception e)
{
MessageBox.Show("Exception while using IsolatedStorageSettings: " + e.ToString());
}
return new List<DefType>();
}
public List<String> Messages
{
get
{
return this.GetListOrDefault<String>("Messeges");
}
set
{
this.AddOrUpdateValue("Messeges", value);
this.Save();
}
}
/// <summary>
/// Delete all data
/// </summary>
public void DeleteAll()
{
m_isolatedStore.Clear();
}
/// <summary>
/// Save the settings.
/// </summary>
public void Save()
{
m_isolatedStore.Save();
}
}
}
然后只需添加到页面
private AppSettings m_appSettings = new AppSettings();
从IsolatedStorage获取消息:
var messages = m_appSettings.Messages;
保存它们:
m_appSettings.Messages = messages;