none
Thread avec une animation de loading RRS feed

  • Question

  • Salut

    je suis debutant en C# WPF . j'ai deux petits soucis que j'aimerais partager avec vous afin que vous puissiez m'aider
    Dans une partie de mon application j'ai un Textbox un bouton sur mon form.
    Au click sur le bouton, je fais une requete sur la base de donnée et j'execute d'autres taches.
    La durée d'execution est un peu long avant l'affichage des résultats.

    Donc j'aimerais afficher le message suivant " Please wait, loading" a l'utilisateur pendant le traitement . et aussi afficher une image Gif (loading ) a coté du message.
    J'aimerais que le message s'affiche dans un label a coté de mon textbox et non dans une autre fenetre ou boite de dialogue.
    J'ai lu sur les forums qu'il faut utiliser les Threads mais j"arrive a le faire correctement.


    J'ai finalement trouvé un code qui m' résolu le problème a moitié.

    public static void ForceUIToUpdate()
            {
            
                DispatcherFrame frame = new DispatcherFrame();
    
                Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Render, new DispatcherOperationCallback(delegate(object parameter)
                {
                    frame.Continue = false;
                    return null;
                }), null);
    
                Dispatcher.PushFrame(frame);
            }
    		
    		private void Button_Click_4(object sender, RoutedEventArgs e)
            {
    
    
               this.pictureBoxLoading.Visibility = System.Windows.Visibility.Visible;
             this.status.Content= "Please wait, loading";
     
               ForceUIToUpdate();
    // function pour le long traitement
    		   runCode();
    		   
              md.Visibility = System.Windows.Visibility.Collapsed;
              this.pictureBoxLoading.Visibility  = System.Windows .Visibility .Collapsed ;
                this.status.Content= "";
              }


    Code xaml

     <Grid x:Name="AddboxGrid"  Grid.Row ="1" Background="#FFB6B6B6" Height="80" >
    
                                <Grid   Margin="0,1,0,0" Width="229" Background="#FFE8E8E8" HorizontalAlignment="Left" VerticalAlignment="Top" Height="79" >
    
                                    <TextBox  x:Name="url_or_rss" Style="{StaticResource StandardPlaceholder }"  HorizontalAlignment="Left" Height="23"  TextWrapping="NoWrap"    VerticalAlignment="Top" Width="219"   BorderBrush="#FFB6B6B6" BorderThickness="1" Margin="4,7,0,0" Foreground="#FF3A3939"/>
                                    <Button Content="Add"  Style="{StaticResource btnStyle}"  HorizontalAlignment="Left" Margin="180,41,0,0" VerticalAlignment="Top" Width="42" Click="Button_Click_4" Height="23" FontSize="12"/>
                                    <Label Content="1" Name="Addbox" HorizontalAlignment="Left" Margin="39,39,0,0" VerticalAlignment="Top" Visibility="Collapsed"/>
                                    <Label Content="" Name="status" HorizontalAlignment="Right" Margin="0,43,79,0" VerticalAlignment="Top" Width="130"/>
    
                                    <WindowsFormsHost   x:Name="pictureBoxLoading" Margin="-11,36,188,6" Width="20" Height="18"  >
                                        <wf:PictureBox x:Name="picture" ImageLocation="E:\3.gif" Height="10"    />
                                    </WindowsFormsHost>
                                    
                                   
                                </Grid>

     J'ai trouvé cela facile et le resultat est ce que je voulais sauf que le GIF ne tourne plus , l'image reste static.
    Mais si j 'utiise l'image dans un ailleurs, elle tourne correctement.

    je me demande alors si le code que j'ai trouvé était la solution adéquate à mon probleme.
    Si oui comment pourrais je faire tourner mon gif(image animé) durant le traitement de l'opération.

    Si non, quel code devrais utiliser pour arriver au resulat.

    Merci de bien vouloir m'aider

       

    AS

    • Déplacé Aurel Bera jeudi 20 février 2014 09:42 OnTopic
    mercredi 19 février 2014 14:50

Réponses

Toutes les réponses