Usuário com melhor resposta
É possível fazer uso do IsolatedStorage com o Action e callback?

Pergunta
-
Olá,
Eu já vi algumas implementações de dataservices que utilizam Action<IList<T>, Excepetion> e queria saber como utilizar callback com o isolatedstorage e, se é possível fazer uso do isolatedstorage de forma assincrona?
segunda-feira, 2 de abril de 2012 22:49
Respostas
-
Olá Gustavo,
Sim, dá pra fazer, mas não sei o quanto de performance você vai ganhar com isso.
Primeiro, vamos criar uma função que busque um arquivo do isolated storage:
private byte[] Load(string file) { using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream stream = storage.OpenFile(file, FileMode.Open)) { byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, (int) stream.Length); return buffer; } } }
Agora, vamos criar um helper para chamar qualquer função de forma assíncrona:
public class Worker { public static void RunAsync<T>(Func<T> method, Action<T> onSuccess, Action<Exception> onError) { ThreadPool.QueueUserWorkItem(o => { try { T resp = method.Invoke(); onSuccess.Invoke(resp); } catch (Exception ex) { onError.Invoke(ex); } }); } }
Crie um método para quando der certo e um para quando der exception:
private void OnLoadOk(byte[] obj) { //faça algo com o arquivo carregado } private void OnLoadError(Exception obj) { //tratar exception }
E agora podemos chamar essa função assim:
Worker.RunAsync(() => Load("meuArquivo"), OnLoadOk, OnLoadError);
Espero que ajude,
André
- André Carlucci - Way2 Technology - twitter/andrecarlucci - andrecarlucci.com
- Marcado como Resposta Thiago Monaco sexta-feira, 13 de abril de 2012 14:20
domingo, 8 de abril de 2012 23:44
Todas as Respostas
-
No Windows phone o acesso ao IsolatedStorage é totalmente sincrono, e como tal não há vantagens reais em usar o modelo de callback assincrono... do pouco que vi do Windows 8 aí sim temos acesso assincrono ao Storage, por isso pode ser que numa futura versão do Windows Phone também ai esteja presente! :)
Pedro Lamas
DevScope | Senior Software Development Engineer & WP7 Development Speaker
www.pedrolamas.com | @pedrolamasterça-feira, 3 de abril de 2012 16:00 -
Olá Gustavo
Dê uma olhada no link abaixo, pode ser útil.
Usando armazenamento isolado em uma aplicação no Windows Phone
Um abraço.
_______________________
Thiago Oliveira
@wp7boy
www.windowsphone-dev.net
quarta-feira, 4 de abril de 2012 00:57 -
Olá Gustavo,
Sim, dá pra fazer, mas não sei o quanto de performance você vai ganhar com isso.
Primeiro, vamos criar uma função que busque um arquivo do isolated storage:
private byte[] Load(string file) { using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream stream = storage.OpenFile(file, FileMode.Open)) { byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, (int) stream.Length); return buffer; } } }
Agora, vamos criar um helper para chamar qualquer função de forma assíncrona:
public class Worker { public static void RunAsync<T>(Func<T> method, Action<T> onSuccess, Action<Exception> onError) { ThreadPool.QueueUserWorkItem(o => { try { T resp = method.Invoke(); onSuccess.Invoke(resp); } catch (Exception ex) { onError.Invoke(ex); } }); } }
Crie um método para quando der certo e um para quando der exception:
private void OnLoadOk(byte[] obj) { //faça algo com o arquivo carregado } private void OnLoadError(Exception obj) { //tratar exception }
E agora podemos chamar essa função assim:
Worker.RunAsync(() => Load("meuArquivo"), OnLoadOk, OnLoadError);
Espero que ajude,
André
- André Carlucci - Way2 Technology - twitter/andrecarlucci - andrecarlucci.com
- Marcado como Resposta Thiago Monaco sexta-feira, 13 de abril de 2012 14:20
domingo, 8 de abril de 2012 23:44