Usuário com melhor resposta
Dúvida sobre C# (Windows Phone)

Pergunta
-
Boa noite pessoal, entao é o seguinte: eu estou a fazer um trabalho em C#(windows phone) que consiste em fazer o download do conteudo de um ficheiro XML, que tem links para imagens, video e audio para depois os reproduzir, o XML tem tambem o playtime para cada um, que é o tempo que cada elemento vai passar(em milisegundos). Eu já faço o download do conteudo do XML e ja consigo reproduzir no emulador. o problema esta em reproduzir pelos tempos certos(o system.timers não funciona no wp), ou seja, esta a reproduzir mas sem ordem nenhuma. Penso que terei de usar um timer mas não sei como o fazer. Esta é a parte do código que uso para reproduzir o video:
private void reproduzVideo(string name_file)
{
using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
{
if (isf.FileExists(name_file))
{
using (var isoStream = isf.OpenFile(name_file, FileMode.Open, FileAccess.Read))
{
mediaSound.SetSource(isoStream);
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
IsolatedStorageFileStream isoFileStream = myIsolatedStorage.OpenFile("xml_file.xml", FileMode.Open);
XElement xml = XElement.Load(isoFileStream);
foreach (XElement node2 in xml.Element("graphics").Elements("file"))
{
string url_graficos = node2.Element("fileurl").Value;
string[] array = url_graficos.Split('/');
string[,] resultadosImage = { { node2.Element("fileurl").Value, node2.Element("playtime").Value, node2.Element("transition").Value } };//penso que aqui teria que colocar um timer que me fosse buscar o "playtime"..
mediaSound.Play();
mediaSound.Stop();
}}
}}
else
{
//MessageBox.Show("The file does not exist");
}
}
}- Movido Levi Domingos sábado, 17 de dezembro de 2011 19:46 (De:C#)
domingo, 11 de dezembro de 2011 03:50
Respostas
-
Olá knurx,
Você realmente precisa tomar conta do tamanho da media?
Se quer tocar até o final, pode simplesmente chamar o mediaSound.Play() e pronto.
Caso deseje saber quando a meida acabou, use o evento: mediaSound.CurrentStateChanged.
Ex:
mediaSound.Play(); mediaSound.CurrentStateChanged += (CurrentStateChanged);
E depois você controla no evento:private void CurrentStateChanged(object sender, System.Windows.RoutedEventArgs e) { switch (mediaSound.CurrentState) { case MediaElementState.Playing: //começou a tocar break; case MediaElementState.Stopped: //acabou break; //... } }
Lembre-se que tudo isso vai ser assíncrono, então vai ter que mudar um pouco seu código.
[]'s!
- André Carlucci - Way2 Technology - twitter/andrecarlucci - andrecarlucci.com- Sugerido como Resposta andrecarlucciMVP terça-feira, 10 de janeiro de 2012 13:13
- Marcado como Resposta Fernando Figuera segunda-feira, 2 de abril de 2012 19:24
terça-feira, 3 de janeiro de 2012 12:43
Todas as Respostas
-
Boa noite pessoal, entao é o seguinte: eu estou a fazer um trabalho em C#(windows phone) que consiste em fazer o download do conteudo de um ficheiro XML, que tem links para imagens, video e audio para depois os reproduzir, o XML tem tambem o playtime para cada um, que é o tempo que cada elemento vai passar(em milisegundos). Eu já faço o download do conteudo do XML e ja consigo reproduzir no emulador. o problema esta em reproduzir pelos tempos certos(o system.timers não funciona no wp), ou seja, esta a reproduzir mas sem ordem nenhuma. Penso que terei de usar um timer mas não sei como o fazer. Esta é a parte do código que uso para reproduzir o video:
private void reproduzVideo(string name_file)
{
using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
{
if (isf.FileExists(name_file))
{
using (var isoStream = isf.OpenFile(name_file, FileMode.Open, FileAccess.Read))
{
mediaSound.SetSource(isoStream);
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
IsolatedStorageFileStream isoFileStream = myIsolatedStorage.OpenFile("xml_file.xml", FileMode.Open);
XElement xml = XElement.Load(isoFileStream);
foreach (XElement node2 in xml.Element("graphics").Elements("file"))
{
string url_graficos = node2.Element("fileurl").Value;
string[] array = url_graficos.Split('/');
string[,] resultadosImage = { { node2.Element("fileurl").Value, node2.Element("playtime").Value, node2.Element("transition").Value } };//penso que aqui teria que colocar um timer que me fosse buscar o "playtime"..
mediaSound.Play();
mediaSound.Stop();
}}
}}
else
{
//MessageBox.Show("The file does not exist");
}
}
}- Mesclado Levi Domingos domingo, 11 de dezembro de 2011 18:53 duplicado
domingo, 11 de dezembro de 2011 04:13 -
Você quer implementar algo time um timer?
Se for da uma olhada neste link
http://www.developer.nokia.com/Community/Wiki/Implement_Timer_control_in_Windows_Phone
quinta-feira, 22 de dezembro de 2011 12:26 -
Olá knurx,
Você realmente precisa tomar conta do tamanho da media?
Se quer tocar até o final, pode simplesmente chamar o mediaSound.Play() e pronto.
Caso deseje saber quando a meida acabou, use o evento: mediaSound.CurrentStateChanged.
Ex:
mediaSound.Play(); mediaSound.CurrentStateChanged += (CurrentStateChanged);
E depois você controla no evento:private void CurrentStateChanged(object sender, System.Windows.RoutedEventArgs e) { switch (mediaSound.CurrentState) { case MediaElementState.Playing: //começou a tocar break; case MediaElementState.Stopped: //acabou break; //... } }
Lembre-se que tudo isso vai ser assíncrono, então vai ter que mudar um pouco seu código.
[]'s!
- André Carlucci - Way2 Technology - twitter/andrecarlucci - andrecarlucci.com- Sugerido como Resposta andrecarlucciMVP terça-feira, 10 de janeiro de 2012 13:13
- Marcado como Resposta Fernando Figuera segunda-feira, 2 de abril de 2012 19:24
terça-feira, 3 de janeiro de 2012 12:43