티스토리 뷰
앱에서 환경 설정 데이터를 저장하는 방법과 불러오는 방법을 설명하도록 하겠다. 사용된 소스는
http://kaki104.tistory.com/104
포스트에 있는 KMusic Player 소스를 사용한다.
1. 저장하기
suspensionManager는 MS의 Sample 프로젝트에 포함되어 있는 클래스인데, 서스펜션 모드로 넘어갈 때 사용 중이던 데이터를 저장하는 용도로 사용 하는데, 몇개의 메소드를 추가해서 데이터를 저장하고 불러오는 용도로 사용할 수 있다.
SuspensionManager.SaveSetting() 메소드를 이용해서 저장할 데이터를 입력하고, SuspensionManager.SaveAsync() 메소드를 호출해서 저장을 할 수 있고, 이곳을 통해서 저장을하면, Collection 객체와 같은 데이터들을 Serializer를해서 저장을 해준다.
SaveSetting 호출 시 입력하는 데이터의 타입을 꼭 넣어 주어야만 저장이 가능하고, 타입은 일반적으로 사용자가 만들은 Model정도를 저장하기 적합하다.
/// <summary>
/// 저장
/// </summary>
static public void SaveSetting(Type type, string key, object data)
{
if(SuspensionManager.KnownTypes.Count(p => p is Type) == 0)
SuspensionManager.KnownTypes.Add(type);
if(SuspensionManager.SessionState.Count(p => p.Key == key) == 0)
SuspensionManager.SessionState.Add(key, data);
else
SuspensionManager.SessionState[key] = data;
}
// Save the current session state
static async public Task SaveAsync()
{
// Get the output stream for the SessionState file.
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
IRandomAccessStream raStream = await file.OpenAsync(FileAccessMode.ReadWrite);
using (IOutputStream outStream = raStream.GetOutputStreamAt(0))
{
// Serialize the Session State.
DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), knownTypes_);
serializer.WriteObject(outStream.AsStreamForWrite(), sessionState_);
await outStream.FlushAsync();
}
}
2. 불러오기
RestoreSetting() 메소드를 이용해서 불러올 데이터의 타입을 입력하고, RestoryAsync() 메소드를 이용해서 불러들인 후 GetData() 메소드를 이용해서 Object에 입력한다.
/// <summary>
/// Type 입력
/// </summary>
/// <returns></returns>
static public void RestoreSetting(Type type)
{
SuspensionManager.KnownTypes.Add(type);
}
// Restore the saved sesison state
static async public Task RestoreAsync()
{
// Get the input stream for the SessionState file.
try
{
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(filename);
if (file == null) return;
IInputStream inStream = await file.OpenSequentialReadAsync();
// Deserialize the Session State.
DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), knownTypes_);
sessionState_ = (Dictionary<string, object>)serializer.ReadObject(inStream.AsStreamForRead());
}
catch (Exception)
{
// Restoring state is best-effort. If it fails, the app will just come up with a new session.
}
}
static public object GetData(string key)
{
object returnValue = null;
if (SessionState.ContainsKey(key) == true)
returnValue = SessionState[key];
return returnValue;
}
3. 사용 예제
MainPageViewModel.cs
//현재 플레이리스트 파일명과 폴더명을 저장한다.
SuspensionManager.SaveSetting(typeof(string), "CurrentPlaylistFileName", CurrentPlaylistFileName);
SuspensionManager.SaveSetting(typeof(string), "currentPlaylistFolderName", currentPlaylistFolderName);
await SuspensionManager.SaveAsync();
//타입을 입력하고
SuspensionManager.RestoreSetting(typeof(string));
//불러오기 하고
await SuspensionManager.RestoreAsync();
//플레이리스트 파일명과, 폴더명을 가지고 온다.
var filename = SuspensionManager.GetData("CurrentPlaylistFileName") as string;
var foldername = SuspensionManager.GetData("currentPlaylistFolderName") as string;
var songindex = SuspensionManager.GetData("currentSongIndex") as string;
'Previous Platforms' 카테고리의 다른 글
Korea Bus Information 2.0 - Windows 8 CP - Build 1.0.0.16 (2) | 2012.04.11 |
---|---|
File 선택과 추가 정보 가져 오기 - Windows 8 CP (0) | 2012.04.03 |
KMusic Player 0.9 - Windows 8 CP - Open Source (0) | 2012.04.02 |
KMusic Player 0.9 beta test, Windows 8 CP (0) | 2012.03.30 |
KMusic Player Help (0) | 2012.03.29 |
- Total
- Today
- Yesterday
- #uwp
- windows 11
- Windows 10
- Microsoft
- Always Encrypted
- dotNETconf
- uno-platform
- visual studio 2019
- Build 2016
- XAML
- C#
- #MVVM
- #Windows Template Studio
- Bot Framework
- .net 5.0
- UWP
- ComboBox
- kiosk
- IOT
- Cross-platform
- MVVM
- PRISM
- uno platform
- ef core
- .net
- Visual Studio 2022
- #prism
- WPF
- LINQ
- Behavior
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |