Jump to content

Aplicação abre muitos FileOpenPicker


Gnrtuga
Go to solution Solved by ribeiro55,

Recommended Posts

Olá pessoal, estou aqui com um problema e não estou a ver a solução.

Tenho uma aplicação em que cada vez que o utilizador clica no botão para abrir novo ficheiro vê um vídeo e só depois é que aparece a caixa de diálogo para escolher o ficheiro a abrir.

Quando usas a primeira vez, funciona bem, mas se fores abrir outro ficheiro já te aparecem duas caixas de diálogo, se abrires um terceiro ficheiro aparecem três e por ai fora... É claro que eu só quero uma caixa de diálogo. 

Este é o código que tenho, alguma sugestão?

private async void AbreButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                await sdkInstance.PlayAdAsync(new AdConfig { Incentivized = true, SoundEnabled = false });
            }

            catch { }
           
           
                
                TempoPublicidade.Interval = TimeSpan.FromSeconds(20);
                TempoPublicidade.Tick += DepoisPublicidade;
                TempoPublicidade.Start();
         }

        

        private async void DepoisPublicidade(object sender, object e)
        {
            TempoPublicidade.Stop();
            try
            {


                //usar o file picker para escolher os ficheiros
                FileOpenPicker MediaContent = new FileOpenPicker();
                MediaContent.ViewMode = PickerViewMode.List;
                MediaContent.SuggestedStartLocation = PickerLocationId.ComputerFolder;
                MediaContent.FileTypeFilter.Add(".wav");
                MediaContent.FileTypeFilter.Add(".wma");
                MediaContent.FileTypeFilter.Add(".mp3");
                

                StorageFile openmedia = await MediaContent.PickSingleFileAsync();
                MyPlayer.AutoPlay = true;
                MyPlayer.SetPlaybackSource(MediaSource.CreateFromStorageFile(openmedia));

                MyPlayer.Play();
                TempoDecorrido.Visibility = Visibility;
              
                //Cria um timer, 
                DispatcherTimer timer = new DispatcherTimer();
                //escolhe o tempo em que é executado
                timer.Interval = TimeSpan.FromSeconds(1);
                //Activa um EventHandler
                timer.Tick += TempoCorre;
                timer.Tick += MudaBarra;
                // Inicia o Timer
                timer.Start();

                //nova forma de dar Focus nas Windows Apps
                TextoBox.Focus(FocusState.Programmatic);

            }
            catch (Exception)
            {
                
            }

        }

Obrigado desde já pela ajuda.

Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

Link to comment
Share on other sites

  • Solution

Olá Gnrtuga.

 

A linha

TempoPublicidade.Tick += DepoisPublicidade;

Só pode ser executada uma vez, pois sempre que for executada está a registar um novo handler.
Corre uma vez, regista uma.
Corre outra vez, regista outra, já abre 2.
Corre outra vez, regista outra, já abre 3, e por aí fora.
Aí dentro só deveria estar:

TempoPublicidade.Start();

A inicialização do timer e o registo do handler pertencem à inicialização OU deves re-instanciar o timer. Aconselho-te a meter:

TempoPublicidade.Interval = TimeSpan.FromSeconds(20);
TempoPublicidade.Tick += DepoisPublicidade;

No formload ou algo do género.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.