私は何か新しい試みをしています。アプリはUWPです。ほとんどのフォームはマスター/ディテールです。すべてのフォームが同じデータインスタンスにアクセスするようなグローバルコレクションが必要です。コレクションに複数のフォームまたはスレッドが同時にアクセスできる状況はありません。C#でファイルから初期化されたシングルトンコレクションを作成しようとしています
私は「所有者」という名前のクラス(モデル)を持っています。
using System;
namespace MyApp.Models
{
public class Owner
{
public Int16 Identifier { get; set; }
public String Name { get; set; }
public String Description { get; set; }
public String Image { get; set; }
public Boolean Active { get; set; }
public DateTime Modified { get; set; }
}
}
OwnerXという名前のシングルトンクラスを作成しました。私が苦労しているこのクラスの2つの側面があります。 最初 OwnerXがコレクションIEnumerableの所有者リストである必要があります。 Second LoadFileAsyncメソッドを作成プロセスに組み込む必要があります。フォームコードは、 "OwnersX Owners = OwnersX.Instance();"を使用してコレクションにアクセスします。
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using MyApp.Models;
using MyApp.Services;
namespace MyApp.Collections
{
public sealed class OwnersX
{
//Need OwnersX to be an IEnumerable<Owner>
private OwnersX() { }
private static OwnersX _instance;
public static OwnersX Instance()
{
if (_instance == null)
{
_instance = new OwnersX();
}
return _instance;
}
// Need this as part of the instance creation process.
private static async Task<IEnumerable<Owner>> LoadFileAsync()
{
String fileContent = await DataFileServicecs.ReadDataFile("Owners.txt", "Data");
StringReader stringReader = new StringReader(fileContent);
String header = stringReader.ReadLine();
String line;
List<Owner> owners = new List<Owner>();
while ((line = stringReader.ReadLine()) != null)
{
String[] fields = line.Split('\t');
owners.Add(new Owner
{
Identifier = Int16.Parse(fields[0]),
Name = fields[1].Replace("\"", String.Empty),
Description = fields[2].Replace("\"", String.Empty),
Image = fields[3],
Active = Boolean.Parse(fields[4]),
Modified = DateTime.Parse(fields[5])
});
}
return owners as IEnumerable<Owner>;
}
}
}
ありがとうございました。