TL; DR: Вы постоянно задаете тело сообщения в цикле, а не добавляете к нему данные.Чтобы это работало, вам нужно иметь:
composeSMS.Body += "Below is my schedule: \n" +
"Date: " + timeList + "\n" +
"Time: " + titleList + "\n" +
"End time: " + categoryList + "\n";
Теперь позвольте мне отметить, что ваш код не оптимизирован и, как правило, может быть сокращен.Например, посмотрите на это:
private void sendSmsBtn_Click(object sender, RoutedEventArgs e)
{
try
{
StreamReader reader;
string[] timeSplit;
string[] timeSplit1;
string[] titleSplit;
string placeholder;
string[] categorySplit;
//For sorted time
using (reader = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\time.Schedule", FileMode.Open, myStore))
{
placeholder = reader.ReadLine();
}
timeSplit = placeholder.Split(new char[] { '^' });
Array.Sort(timeSplit, delegate(string first, string second)
{
return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
});
using (reader = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\time1.Schedule", FileMode.Open, myStore))
{
placeholder = reader.ReadLine();
}
timeSplit1 = placeholder.Split(new char[] { '^' });
Array.Sort(titleSplit1);
using (reader = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\title.Schedule", FileMode.Open, myStore)))
{
placeholder = reader.ReadLine();
}
titleSplit = placeholder.Split(new char[] { '^' });
Array.Sort(titleSplit);
using(reader = new StreamReader(new IsolatedStorageFileStream(fullFolderName + "\\category.Schedule", FileMode.Open, myStore)))
{
placeholder = readFileCategory.ReadLine();
}
categorySplit = placeholder.Split(new char[] { '^' });
Array.Sort(categorySplit);
}
catch (Exception)
{
}
var composeSMS = new SmsComposeTask();
var sBuilder = new StringBuilder();
sBuilder.AppendLine("Below is my schedule:");
for (int i = 0; i < timeSplit.Length; i++)
{
sBuilder.AppendLine("Date: " + timeSplit[i]);
sBuilder.AppendLine("Time: " + titleSplit[i]);
sBuilder.AppendLine("End time: " + categorySplit[i]);
}
composeSMS.Body = sBuilder.ToString();
composeSMS.Show();
}
ПРИМЕЧАНИЕ: Я редактировал ваш код в Блокноте, не имея доступа к компилятору.Могут потребоваться некоторые модификации.
Вот некоторые основные отличия от того, что у вас есть.
- Я повторно использую тот же reader (экземплярStreamReader) снова и снова вместо создания новых экземпляров для каждого отдельного файла.
- Обратите внимание на оператор using , используемый вдоль строк, где используется читатель.Также обратите внимание на фигурные скобки - таким образом, экземпляр reader будет правильно удален, как только я закончу работать с ним (чтение файла).
- Вам нужен только один экземпляр строка-заполнитель строка, поскольку все строки составных строк нигде не используются.Эта строка placeholder сбрасывается при каждом чтении.
- Я использую StringBuilder для построения тела и только когда он готов, я устанавливаю Body свойство.
- Нет необходимости в промежуточных переменных внутри цикла.
Последний, но не менее важный совет.Вы должны реорганизовать способ хранения данных.Чтение четырех файлов в этом случае для создания единого объекта неправильно и требует много ресурсов.Подумайте об использовании единого хорошо структурированного формата (например, XML или JSON) для хранения данных в одном файле.Более того, рассмотрите возможность использования базы данных (начиная с SDK v.7.1 есть поддержка SQL CE).