none
Ficar executando código a partir de um tempo RRS feed

  • Pergunta

  • Olá

    Estou trabalhando com mapas para windows phone 8, consigo fazer ele recuperar a minha localização normalmente, o problema, é que conforme eu me movo(vou para uma nova localização) ele não atualiza automaticamente...

    Então, queria saber como posso fazer pra executar a minha função de recuperar a localização a partir de algum curto período de tempo para deixar o app dinâmico.

    Por exemplo: a cada 0,5 segundos ele vai executar o código de novo e mover o pin do mapa para a nova localização

    Alguém para me dar uma luz ?

    quarta-feira, 27 de maio de 2015 03:19

Todas as Respostas

  • Para fazer isso, é preciso de um Timer.

    using system;
    
    using System.Timers;
    
    namespace test_atualiza
    
    {
    
    public partial class Form1 : Form
    
    {
    
    public Form1()
    
    {
    
    Initialize Component();
    
    }
    
    System.Timers.Timer t = new System.Timers.Timer();
    
    Private void Form1_load(object sender, EventArgs e)
    
    {
    
    }
    
    //Sua função que recupera a posição
    
    public void recupera_posicao(object sender, ElapsedEventArgs e)
    
    {
    
    ....
    
    }
    
    A forma abaixo utiliza botão, mas você pode colocar uma função no Form_load que ele executa automaticamente.
    
    private void button1_Click(object sender, EventArgs e)
    
    {
    
    //Aqui você coloca sua função de recuperar a localização
    
    t.Elapsed += new ElapsedEventHandler(recupera_posicao);
    
    t.Interval = 2000; // 2 segundos
    
    t.Enable = true;
    
    }
    
    }
    
    }


    • Editado Supimpa quarta-feira, 27 de maio de 2015 13:11
    quarta-feira, 27 de maio de 2015 13:10
  • Olá amigo

    Não consegui com o Timer, mas consegui com o DispatcherTimer

    O problema é que sou novo em c#, e não sei como faço pra pegar o meu pin(já criado) e passar para outra private void

    segue meu codigo :

      private async void timer_Tick(object sender, EventArgs e)
            {
                // Get my current location.
                Geolocator myGeolocator = new Geolocator();
                Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync();
                Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
                GeoCoordinate myGeoCoordinate =
                CoordinateConverter.ConvertGeocoordinate(myGeocoordinate);
    
                // Create a small circle to mark the current location.
                Ellipse myCircle = new Ellipse();
                myCircle.Fill = new SolidColorBrush(Colors.Blue);
                myCircle.Height = 20;
                myCircle.Width = 20;
                myCircle.Opacity = 50;
    
                // Create a MapOverlay to contain the circle.
                MapOverlay myLocationOverlay = new MapOverlay();
                myLocationOverlay.Content = myCircle;
                myLocationOverlay.PositionOrigin = new Point(0.5, 0.5);
                myLocationOverlay.GeoCoordinate = myGeoCoordinate;
    
                // Create a MapLayer to contain the MapOverlay.
                MapLayer myLocationLayer = new MapLayer();
                myLocationLayer.Add(myLocationOverlay);
    
                // Add the MapLayer to the Map.
                mapWithMyLocation.Layers.Add(myLocationLayer);
            }
            
     

    Com isso, ele acaba criando vários Ellipse, ou seja, quero criar esses Ellipse apenas uma vez, e apenas alterar a posição dele

    Pra isso, acho que teria que ser algo como :

    private void criacirculo{

    new Ellipse = circle

    }

    private void timer_Tick {

    position = circle

    }


    • Editado zyzzNeverdie quinta-feira, 28 de maio de 2015 15:53
    quinta-feira, 28 de maio de 2015 15:51
  • Cria a instância do Objeto como Global.
    Coloca essa parte do código fora do método.

    Ellipse myCircle = new Ellipse();

    Desta forma ele irá criar apenas uma vez o Ellipse e no método você apenas passa novos valores a cada chamada da função sem criar o objeto novamente.

    Ellipse myCircle = new Ellipse();
    
    private async void timer_Tick(object sender, EventArgs e)
            {
               ........
    
               // Ellipse myCircle = new Ellipse();
                myCircle.Fill = new SolidColorBrush(Colors.Blue);
                myCircle.Height = 20;
                myCircle.Width = 20;
                myCircle.Opacity = 50;
    
    ...............
    
    }

    • Editado Supimpa sexta-feira, 29 de maio de 2015 10:43
    sexta-feira, 29 de maio de 2015 10:41
  • Com timer, ficaria assim:

    using System.Timers;
    .....
    
    System.Timers.Timer t = new System.Timers.Timer();
     Ellipse myCircle = new Ellipse();
    
     private void timer_Tick(object sender, ElapsedEventArgs e)
            {
                // Get my current location.
                Geolocator myGeolocator = new Geolocator();
                Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync();
                Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
                GeoCoordinate myGeoCoordinate =
                CoordinateConverter.ConvertGeocoordinate(myGeocoordinate);
    
                // Create a small circle to mark the current location.
    
    	 // Ellipse myCircle = new Ellipse();           
                myCircle.Fill = new SolidColorBrush(Colors.Blue);
                myCircle.Height = 20;
                myCircle.Width = 20;
                myCircle.Opacity = 50;
    
                // Create a MapOverlay to contain the circle.
                MapOverlay myLocationOverlay = new MapOverlay();
                myLocationOverlay.Content = myCircle;
                myLocationOverlay.PositionOrigin = new Point(0.5, 0.5);
                myLocationOverlay.GeoCoordinate = myGeoCoordinate;
    
                // Create a MapLayer to contain the MapOverlay.
                MapLayer myLocationLayer = new MapLayer();
                myLocationLayer.Add(myLocationOverlay);
    
                // Add the MapLayer to the Map.
                mapWithMyLocation.Layers.Add(myLocationLayer);
            }
    
    
    private void button1_Click(object sender, EventArgs e)
    {
    t.Elapsed += new ElapsedEventHandler(timer_Tick);
    t.Interval = 2000; // 2 segundos
    t.Enable = true;
    }
    
    private void button2_Click(object sender, EventArgs e)
    
    {
    t.stop();
    }

    sexta-feira, 29 de maio de 2015 10:57
  • Cria a instância do Objeto como Global.
    Coloca essa parte do código fora do método.

    Ellipse myCircle = new Ellipse();

    Desta forma ele irá criar apenas uma vez o Ellipse e no método você apenas passa novos valores a cada chamada da função sem criar o objeto novamente.

    Ellipse myCircle = new Ellipse();
    
    private async void timer_Tick(object sender, EventArgs e)
            {
               ........
    
               // Ellipse myCircle = new Ellipse();
                myCircle.Fill = new SolidColorBrush(Colors.Blue);
                myCircle.Height = 20;
                myCircle.Width = 20;
                myCircle.Opacity = 50;
    
    ...............
    
    }

    Desta forma da break na aplicação
    quarta-feira, 3 de junho de 2015 16:01
  • Com timer, ficaria assim:

    using System.Timers;
    .....
    
    System.Timers.Timer t = new System.Timers.Timer();
     Ellipse myCircle = new Ellipse();
    
     private void timer_Tick(object sender, ElapsedEventArgs e)
            {
                // Get my current location.
                Geolocator myGeolocator = new Geolocator();
                Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync();
                Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
                GeoCoordinate myGeoCoordinate =
                CoordinateConverter.ConvertGeocoordinate(myGeocoordinate);
    
                // Create a small circle to mark the current location.
    
    	 // Ellipse myCircle = new Ellipse();           
                myCircle.Fill = new SolidColorBrush(Colors.Blue);
                myCircle.Height = 20;
                myCircle.Width = 20;
                myCircle.Opacity = 50;
    
                // Create a MapOverlay to contain the circle.
                MapOverlay myLocationOverlay = new MapOverlay();
                myLocationOverlay.Content = myCircle;
                myLocationOverlay.PositionOrigin = new Point(0.5, 0.5);
                myLocationOverlay.GeoCoordinate = myGeoCoordinate;
    
                // Create a MapLayer to contain the MapOverlay.
                MapLayer myLocationLayer = new MapLayer();
                myLocationLayer.Add(myLocationOverlay);
    
                // Add the MapLayer to the Map.
                mapWithMyLocation.Layers.Add(myLocationLayer);
            }
    
    
    private void button1_Click(object sender, EventArgs e)
    {
    t.Elapsed += new ElapsedEventHandler(timer_Tick);
    t.Interval = 2000; // 2 segundos
    t.Enable = true;
    }
    
    private void button2_Click(object sender, EventArgs e)
    
    {
    t.stop();
    }

    Amigo, no projeto em que criei, não consigo usar essa biblioteca
    quarta-feira, 3 de junho de 2015 16:07
  • Boa tarde,

    Tudo bem?

    Encontrou alguma solução para o seu problema?

    Atenciosamente

    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 10 de fevereiro de 2016 19:58