IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

faire tourner une animation gif(ou autre)


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut faire tourner une animation gif(ou autre)
    Bonjour j'aimerai mettre dans mon application une image gif(ou bien un avi) qui tourne continuellement sur mon application, hors des que j'exécute une action(et exécute du code) l'animation "freeze". Comment je peux m'y prendre, suis je obligé de faire un second thread juste pour faire tourner une image?
    existe il deja des controles qui s'occupent tout seul de l'animation d'une image et qui ne se fige pas à chaque instant.

    Merci de vos message

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Hello,

    je suppose que pendant que ton animation "tourne", tu fais des traitements derrière. A ce moment là, oui, il faut un autre thread pour faire les traitements, pour que l'interface puisse continuer à se rafraîchir correctement. (l'interface étant grossomodo une espèce de while(1) qui intercepte les évènements graphique et y réagit: si tu colles dedans un gros traitement, le rafraîchissement peine).

    Pour implémenter ça, il y a plusieurs solutions, dont le backgroundworker.

    A+

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Le problème est que mon traitement intervient aussi sur l'interface graphique.
    et là, j'ai un peu plus de difficultés....
    Grosso modo, le logiciel se présente avec un droite un treeview presentant plusieurs tableurs, on clique dessus(traitement + affichage du tableur), et j'aimerai qu'en dessous du tableur démarre un composant d'activités. Hors exécuté le traitement dans un autre thread n'est pas complexe, mais rajouter les forumlaires créé par le traitement et l'afficher dans le thread principal,me pose toujours des soucis.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Je crois que ceci pourra t'aider...

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    les choses m'échappent encore, j'ai repris le code et voulu juste le modifier un peu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    Imports System
     
    Imports System.Drawing
     
    Imports System.Collections
     
    Imports System.ComponentModel
     
    Imports System.Windows.Forms
     
    Imports System.Threading
     
    Namespace ThreadTest
     
        Public Class Form1
     
            Inherits System.Windows.Forms.Form
     
     
     
            Private Delegate Sub InvokeMethod(ByVal [step] As Integer)
     
     
     
            Private progressBar1 As System.Windows.Forms.ProgressBar
     
            Private button1 As System.Windows.Forms.Button
     
            Private components As System.ComponentModel.Container = Nothing
     
     
     
            Public Sub New()
     
                InitializeComponent()
     
            End Sub
     
     
     
            Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
     
                If disposing Then
     
                    If Not components Is Nothing Then
     
                        components.Dispose()
     
                    End If
     
                End If
     
                MyBase.Dispose(disposing)
     
            End Sub
     
     
     
            Private Sub InitializeComponent()
     
                Me.progressBar1 = New System.Windows.Forms.ProgressBar()
     
                Me.button1 = New System.Windows.Forms.Button()
     
                Me.SuspendLayout()
     
                Me.progressBar1.Location = New System.Drawing.Point(8, 16)
     
                Me.progressBar1.Name = "progressBar1"
     
                Me.progressBar1.Size = New System.Drawing.Size(344, 24)
     
                Me.progressBar1.TabIndex = 3
     
                Me.button1.Location = New System.Drawing.Point(424, 8)
     
                Me.button1.Name = "button1"
     
                Me.button1.Size = New System.Drawing.Size(96, 40)
     
                Me.button1.TabIndex = 2
     
                Me.button1.Text = "GO"
     
                AddHandler Me.button1.Click, AddressOf Me.button1_Click
     
                Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
     
                Me.ClientSize = New System.Drawing.Size(544, 285)
     
                Me.Controls.Add(Me.progressBar1)
     
                Me.Controls.Add(Me.button1)
     
                Me.Name = "Form2"
     
                Me.Text = "Form2"
     
                Me.ResumeLayout(False)
     
     
     
            End Sub
     
     
     
            Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
                Dim a As Integer
                Dim objCOntrol As UserControl
     
                Me.progressBar1.Minimum = 0
     
                Me.progressBar1.Maximum = 10
     
                Dim t As New Thread(New ThreadStart(AddressOf ThreadProcess))
     
                t.Start()
     
                For intcompteur As Integer = 1 To 1000000000
                    a = a + 1
                Next
                objCOntrol = New UserControl
                objCOntrol.BackColor = Color.Red
                Me.Controls.Add(objCOntrol)
            End Sub
     
     
     
            Private Sub ThreadProcess()
     
                Dim res As IAsyncResult
     
                Dim i As Integer = 0
     
                While i < 11
     
                    res = progressBar1.BeginInvoke(New InvokeMethod(AddressOf UpdateProgressBar), New Object() {i})
     
                    progressBar1.EndInvoke(res)
     
                    Thread.Sleep(1000)
     
                    System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
     
                End While
     
            End Sub
     
     
     
            Private Sub UpdateProgressBar(ByVal [step] As Integer)
     
                Me.progressBar1.Value = [step]
     
            End Sub
     
        End Class
     
    End Namespace
    dans ce cas ma progressbar s'active seulement apres que mon usercontrol soit ajouté, or la progressbar est lancé dans un thread différent?

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Je n'ai pas très bien compris ton cas réel, mais à vue de nez je dirai qu'il faut commenter les lignes suivantes: (en plus c'est en VB ) ( bien sûr!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    progressBar1.EndInvoke(res)
    Thread.Sleep(1000)
    Sinon, je pense qu'il serait bien que tu t'intéresses à ces questions (invocation sur des controls, opération synchrone vs asynchrone, threads, etc...) je t'assure que ça te servira... Tiré des MSDN sur Control.EndInvoke():
    If the asynchronous operation has not been completed, this function will block until the result is available.

Discussions similaires

  1. Générer une animation gif ou autre format
    Par Djakisback dans le forum Général Java
    Réponses: 8
    Dernier message: 01/07/2010, 01h25
  2. Comment faire tourner une image GIF ?
    Par Claude_Azoulai dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 28/07/2009, 10h21
  3. Réponses: 11
    Dernier message: 30/05/2009, 21h21
  4. Faire tourner une Application en Taches de fond
    Par ArkAng3 dans le forum MFC
    Réponses: 3
    Dernier message: 26/08/2005, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo