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

Windows Forms Discussion :

[VB.net] Problème de synchronisation d'une base


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut [VB.net] Problème de synchronisation d'une base
    Bonjour à tous,

    J'ai un problème avec la fonction DEVICETODESKTOP de la dll adofltr.dll provenant de Active Sync.
    Cette fonction doit me permettre de copier en convertisant un fichier .cdb de PPC vers un fichier .mdb sur mon PC.
    Dans le sens inverse (DEKTOPTODEVICE), cela fonctionne très bien.

    Le code des fonctions:
    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
    Module CopyFileToDevice
     
        Public Function BoolToShort(ByVal Value As Boolean) As Short
            If Value = False Then
                Return 0
            Else
                Return 1
            End If
        End Function
     
        Declare Function DESKTOPTODEVICE Lib "c:\Program files\Microsoft ActiveSync\adofiltr.dll" _
       (ByVal desktoplocn As String, _
        ByVal tablelist As String, _
        ByVal sync As Boolean, _
        ByVal overwrite As Integer, _
        ByVal devicelocn As String) As Long
     
        Declare Function DEVICETODESKTOP Lib "c:\Program files\Microsoft ActiveSync\adofiltr.dll" _
        (ByVal desktoplocn As String, _
         ByVal tablelist As String, _
         ByVal sync As Boolean, _
         ByVal overwrite As Integer, _
         ByVal devicelocn As String) As Long
     
        Public Function DesktopToDevice(ByVal DesktopLocation As String, ByVal TableList As String, _
        ByVal Sync As Boolean, ByVal Overwrite As Boolean, ByVal DeviceLocation As String) As Integer
            Return DesktopToDevice(DesktopLocation, TableList, Sync, BoolToShort(Overwrite), DeviceLocation)
        End Function
     
        Public Function DeviceToDesktop(ByVal DesktopLocation As String, ByVal TableList As String, _
          ByVal Sync As Boolean, ByVal Overwrite As Boolean, ByVal DeviceLocation As String) As Integer
            Return DeviceToDesktop(DesktopLocation, TableList, Sync, BoolToShort(Overwrite), DeviceLocation)
        End Function
     
    End Module
    L'appel:
    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
     If myRAPI.DeviceFileExists("\My Documents\RMS\Soteg.cdb") Then
                            Dim result As Integer = DEVICETODESKTOP(Application.StartupPath & "\transfertSoteg.mdb", "", False, True, "\My Documents\RMS\Soteg.cdb")
                            Select Case result
                                Case 0
                                    MsgBox("Transfert des données à partir du terminal terminé avec succès !", MsgBoxStyle.Exclamation)
                                Case -2147024894
                                    MsgBox("Aucun terminal n'est connecté!", MsgBoxStyle.Critical)
                                Case -2146824447
                                    MsgBox("Les tables de destination existent déjà!", MsgBoxStyle.Critical)
                                Case -2147217865
                                    MsgBox("Les tables n'existent pas sur le PC !", MsgBoxStyle.Critical)
                                Case Else
                                    MsgBox(result & "   Une erreur est survenue durant le transfert des données !", MsgBoxStyle.Critical)
                            End Select
                        Else
                            MsgBox("Aucun fichier de données sur le terminal!", MsgBoxStyle.Critical)
                        End If
                        myRAPI.Disconnect()
    A chaque exécution, j'ai une erreur:
    Arithmetic operation resulted in an overflow.

    Je ne vois pas du tout ou est le problème. Cette erreur est envoyée par l'appell à la fonction de la DLL dans mon module.

    Quelqu'un pourrait m'aider sur ce point? L'erreur n'a pas de sens lors d'un transfert de données. Ou alors des données de ma base ne conviennent pas pour le PC, mais je n'y crois pas vraiment.

    Merci d'avance.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Intuitivement çà sent un souci de typage
    Peux-tu ajouter à ta classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Option Explicit On 
    Option Strict On
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    Salut Neguib,

    J'ai mis l'option et corrigé certains points dans mon code (conversions implicites, ....) mais cela ne change rien du tout.
    J'ai identiquement la même erreur.

    Initialement, j'ai un fichier Template.mdb que je rempli sur le PC avec des données provenant de MySQL. Je synchronise ce fichier vers le PPC.
    Je traite mes données sur le PPC (input user) et j'insère dans la base CDB.
    Enfin je synchronise dans l'autre sens.

    La déclaration des fonctions de transfert provient de MSDN.

    Merci pour votre aide.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  4. #4
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    J'avance. A présent, le transfert fonctionne dans les deux sens, mais une seule fois dans l'application. Si j'effectue le transfert dans le même sens dans une même session de l'appli, ca plante (arithmetic....) Je vais trouver.

    En rapport avec ces deux fonctions modales, j'aurais besoin de vos idées pour me permettre de faire patienter l'utilisateur avec soit une anim gif représentant un transfert, soit une progress bar qui boucle ou quoi que ce soit d'autre que le blocage complet de mon appli. C'est moche et pas très professionnel.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    utilises le multithreading
    http://faqvbnet.developpez.com/?page=thread
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    Oui j'ai pensé au multithreading que j'ai déjà utilisé mais ca ne m'interesse pas de déporter mon processus dans un thread a part. Je dois effectivement attendre la fin de cette procédure de traitement pour pouvoir continuer mes opérations.

    Idéalement, le fait d'utiliser un thread empecherais déjà l'affichage de mon appli principale de bloquer. Très bon point.

    Mais en plus de cela, il fuadrait qu'une fenêtre avec un gif animé ou une progress bar indéfinie apparaisse le temps que le thread se termine par exemple pour bloquer mes traitements et avertir l'utilisateur qu'il se passe quelque chose.

    Tu as une idée pour implémenter ca au mieux?
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    1. la fin du thread doit déjà déclencher un evenement que tu capture dans ton appli par un delegate, dans celui -ci tu code la fermeture de la fenêtre temporaire par exemple
    2. Donc consecutivement au lancement du thread tu ouvres simplement une fenêtre modale (sans bouton ni menu system) qui contient juste un label("veuillez patienter") et ton gif animé, tu peux eventuellement modifier l'image aussi du curseur en sablier.
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  8. #8
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    1. la fin du thread doit déjà déclencher un evenement que tu capture dans ton appli par un delegate, dans celui -ci tu code la fermeture de la fenêtre temporaire par exemple
    J'entend beaucoup parlé du deleguate sans vraiment avoir de notions sur son rôle, utilisation,... Un delegate correspond à un lanceur d'évènements?

    2. Donc consecutivement au lancement du thread tu ouvres simplement une fenêtre modale (sans bouton ni menu system) qui contient juste un label("veuillez patienter") et ton gif animé, tu peux eventuellement modifier l'image aussi du curseur en sablier.
    Ca me plait cette idée, il faut juste savoir comment coder un delegate.

    Merci de tes infos.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  9. #9
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    J'ai testé en lancant une fenêtre avec un timer et une progressbar. Elle commence à augmenter mais dés que ma fonction DEVICETODESKTOP prend la main, même la petite fenêtre bloque... Il va aussi falloir que je lance ma form dans un thread ou quoi?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim frmWaiting As New frmWaiting
                            Dim myThread As New System.Threading.Thread(AddressOf frmWaiting.Show)
                            myThread.Start()
                            Dim result As Integer = DESKTOPTODEVICE(Application.StartupPath & "\Soteg.mdb", "", True, True, "\My Documents\RMS\Soteg.cdb")
                            myThread.Abort()
    Je vois pas la raison de mes problèmes.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  10. #10
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Perso je voyais l'inverse plutôt
    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
     
    Imports System.Threading
    '...
    Private cptd As CopyFileToDevice 
    Private frmWaiting As frmWaiting
    Private myThread As Thread
    '...
    Private Sub StartThread()
      Me.cptd = New CopyFileToDevice(Application.StartupPath &_
       "\Soteg.mdb", "\My Documents\RMS\Soteg.cdb"))
      Me.frmWaiting = New frmWaiting()
      Me.frmWaiting.Show()
      Me.myThread = New Thread(AddressOf Me.ExecuteCopy)
      Me.myThread.Name = "Thread1"
      Me.myThread.Start()
    End Sub
    Private Function ExecuteCopy() As Integer
      Return Me.cptd.Execute()
    End Function
    'Ici çà suppose que tu as déclaré un "ThreadEndEvent" dans
    ' la classe CopyFileToDevice pour signaler la fin de l'execution
    ' par un RaiseEvent ThreadEndEvent
    ' il est preferable d'utiliser une classe plutôt qu'un Module
    Private Sub MyThreadEndEvent() Handles cptd.ThreadEndEvent
      Me.cptd.Dispose()
      Me.frmWaiting.Close()
    End Sub
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  11. #11
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    OK, je commence à comprendre le principe.
    J'ai déjà modifié ma classe mais je ne vois pas trop comment tu implémente le threadEndEvent? C'est un fonction de ma classe?

    Merci pour ta patience.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  12. #12
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par WriteLN
    OK, je commence à comprendre le principe.
    J'ai déjà modifié ma classe mais je ne vois pas trop comment tu implémente le threadEndEvent? C'est un fonction de ma classe?

    Merci pour ta patience.
    C'est un event (EventHandler) non une fonction
    Une simple declaration devrait suffire dans CopyFileToDevice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Event ThreadEndEvent
    San oublier (mais là c'est à toi de voir) à quel moment opportun du déclenches dans CopyFileToDevice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RaiseEvent ThreadEndEvent()
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  13. #13
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    J'avance.

    Ma classe copyFileTodevice:
    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
    Public Class CopyFileToDevice
     
        Private hostPath, remotePath As String
        Private async, overwrite As Boolean
        Private result As Integer = 0
     
        Public Sub New(ByVal hPath As String, ByVal rPath As String, ByVal sync As Boolean, ByVal OW As Boolean)
            hostPath = hPath
            remotePath = rPath
            async = sync
            overwrite = OW
        End Sub
     
        Public Function BoolToShort(ByVal Value As Boolean) As Short
            If Value = False Then
                Return 0
            Else
                Return 1
            End If
        End Function
     
        Declare Function DESKTOPTODEVICE Lib "c:\Program files\Microsoft ActiveSync\adofiltr.dll" _
       (ByVal desktoplocn As String, _
        ByVal tablelist As String, _
        ByVal sync As Boolean, _
        ByVal overwrite As Integer, _
        ByVal devicelocn As String) As Long
     
        Declare Function DEVICETODESKTOP Lib "c:\Program files\Microsoft ActiveSync\adofiltr.dll" _
        (ByVal desktoplocn As String, _
         ByVal tablelist As String, _
         ByVal sync As Boolean, _
         ByVal overwrite As Integer, _
         ByVal devicelocn As String) As Long
     
        Public Function Desktop2Device()
            result = DESKTOPTODEVICE(hostPath, "", async, BoolToShort(overwrite), remotePath)
            RaiseEvent threadEndEvent()
        End Function
     
        Public Function Device2Desktop()
            result = DEVICETODESKTOP(hostPath, "", async, BoolToShort(overwrite), remotePath)
            RaiseEvent threadEndEvent()
        End Function
     
        Public Event threadEndEvent()
     
    End Class
    J'envoie l'event juste après l'exécution de ma fonction de la DLL.

    Dans mon code de ma fenêtre principale, j'ai un bouton qui active un transfert comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim cptd As CopyFileToDevice
                            Dim frmWaiting As frmWaiting
                            Dim myThread As System.Threading.Thread
                            cptd = New CopyFileToDevice(Application.StartupPath & "\Soteg.mdb", "\My Documents\RMS\Soteg.cdb", True, True)
                            frmWaiting = New frmWaiting
                            frmWaiting.Show()
                            myThread = New System.Threading.Thread(AddressOf cptd.Desktop2Device)
                            myThread.Name = "Thread1"
                            myThread.Start()
    Erreur avec le addressOf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:\Projects\GestCompt\GestCompt\frmMain.vb(611): Method 'Public Function Desktop2Device() As Object' does not have the same signature as delegate 'Delegate Sub ThreadStart()'.
    Enfin, dans mon code de la form pricnipale, comment vais-je pouvoir bloquer mon traitement tant que le thread n'est pas terminé? En effet, je dois lancer le thread, mais les lignes de codes qui suivant le start ne doivent pas être exécutée tant que mon thread n'a pas terminé. Je peux imaginer que l'event mette une variable globale a true et que après le start du thread, je boucle tant que false.
    Le problème est que ca risque aussi de ralentir mon appli lol.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  14. #14
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Essayes
    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
     
    Public Class CopyFileToDevice
     
        Private hostPath  As String
        Private remotePath As String
        Private async  As Boolean
        Private overwrite As Boolean
        Private result As Integer
     
        Public Event threadEndEvent(ByVal resultat As Integer)
     
        Public Sub New(ByVal hPath As String, ByVal rPath As String, ByVal sync As Boolean, ByVal OW As Boolean)
          With Me
            .hostPath = hPath
            .remotePath = rPath
            .async = sync
            .overwrite = OW
            .result = 0
          End With
        End Sub
     
        Public Function BoolToShort(ByVal Value As Boolean) As Short
            If Not Value Then Return 0 Else Return 1
        End Function
     
        Declare Function DESKTOPTODEVICE Lib "c:\Program files\Microsoft ActiveSync\adofiltr.dll" 'etc...
        Declare Function DEVICETODESKTOP Lib "c:\Program files\Microsoft ActiveSync\adofiltr.dll" _'etc...
     
        Public Sub Desktop2Device()
           Me.result = DESKTOPTODEVICE( _
                            Me.hostPath, "",  _
                            Me.async, _
                            Me.BoolToShort(Me.overwrite), _
                            Me.remotePath)
           RaiseEvent threadEndEvent(Me.result)
        End Function
     
        Public Sub Device2Desktop()
           Me.result = DEVICETODESKTOP( _
                            hostPath, "", _
                            Me.async, _
                            Me.BoolToShort(Me.overwrite), _
                            Me.remotePath)
           RaiseEvent threadEndEvent(Me.result)
        End Function
    End Class
    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
     
    Imports System.Threading
    Public Class Form1
      '...etc..
      Private WithEvents cptd As CopyFileToDevice
      Private frmWaiting As frmWaiting  
      Private myThread As Thread
      '...etc..
      Private Sub copy_Click(ByVal sender As Object, ByVal e As Event Args) Handles copy.Click
        Me.frmWaiting = New frmWaiting()
        Me.cptd = New CopyFileToDevice(Application.StartupPath & "\Soteg.mdb", "\My Documents\RMS\Soteg.cdb", True, True)
        Me.frmWaiting.ShowDialog(Me)
        Me.myThread = New Thread(AddressOf Me.cptd.Desktop2Device)
        Me.myThread.Name = "Thread1"
        Me.myThread.Start()
    End Sub
      Private Sub EndThread(Byval result As Integer) Handles cptd.threadEndEvent
        Me.frmWaiting.Close()
        Me.frmWaiting.Dispose()
        'traiter ici result si necessaire
        If Not(Me.myThread Is Nothing Then
          Me.myThread.Abort()
          Me.myThread.Dispose()
        End If
      End Sub
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  15. #15
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    Génial, ça fonctionne parfaitement maintenant. A voir la puissance des threads, je pense que je vais m'y attarder un peu plus. Quelle optimisation !

    Si j'ai bien compris, ta modif c'est en gros d'avoir mis Sub en lieu et place de Function? Je n'ai eu qu'à changer ca.
    On ne peut pas exécuter une function via le thread?

    Merci à toi Neguib.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  16. #16
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    Un dernier soucis en fait:
    Lorsque je lance l'event ThreadEndEvent, de ma classe, je reCois une erreur du bloc Try Catch qui englobe ma fonction de copie.

    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
    Public Sub Device2Desktop()
            Try
                result = DEVICETODESKTOP(hostPath, "", async, BoolToShort(overwrite), remotePath)
                Select Case result
                    Case 0
                        MsgBox("Transfert des données vers le PC terminé avec succès !", MsgBoxStyle.Exclamation)
                    Case -2147024894
                        MsgBox("Aucun terminal n'est connecté!", MsgBoxStyle.Critical)
                    Case -2146824447
                        MsgBox("Les tables de destination existent déjà!", MsgBoxStyle.Critical)
                    Case -2147217865
                        MsgBox("Les tables n'existent pas sur le terminal !", MsgBoxStyle.Critical)
                    Case Else
                        MsgBox(result & "   Une erreur est survenue durant le transfert des données !", MsgBoxStyle.Critical)
                End Select
                RaiseEvent threadEndEvent()
            Catch ex As Exception
                MsgBox("Erreur durant la copie du fichier vers le PC: " & ex.Message)
                RaiseEvent threadEndEvent()
            End Try
        End Sub
    L'erreur est la suivante:
    Thread was being aborted
    C'est vraiment necessaire de lancer cet abort? En théorie ma fonction va se terminer et donc le thread va se terminer de lui même....

    En dehors de çà, c'est parfait
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

  17. #17
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par WriteLN
    Génial, ça fonctionne parfaitement maintenant. A voir la puissance des threads, je pense que je vais m'y attarder un peu plus. Quelle optimisation !

    Si j'ai bien compris, ta modif c'est en gros d'avoir mis Sub en lieu et place de Function? Je n'ai eu qu'à changer ca.
    On ne peut pas exécuter une function via le thread?

    Merci à toi Neguib.
    j'ai également ajouter WithEvents pour cptd ce qui permet la capture ensuite des evenements de CopyFileToDevice
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  18. #18
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par WriteLN
    Lorsque je lance l'event ThreadEndEvent, de ma classe, je reCois une erreur du bloc Try Catch qui englobe ma fonction de copie.
    Mais tu le lances aussi d'ailleurs ou tu parles du RaiseEvent du bloc Catch uniquement(car celui là me semble de trop) fait un bloc finally pour accueillir un unique RaiseEvent
    Pour la Abort met le commentaire et testes
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  19. #19
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 298
    Points : 156
    Points
    156
    Par défaut
    Oui si je met le abort en commentaire ca marche bien lol. MAis je pense que le Abort n'est pas indispensable car mon thread se termine de lui même après que ma fonction ai terminé sont travail. Donc je pense que je vais m'en contenter

    Merci pour tout.
    WebAgency www.cpstyle.net
    BncAgency www.bncmasters.net

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ASP.NET]Problème de droits sur une base access
    Par dacid dans le forum ASP.NET
    Réponses: 8
    Dernier message: 25/11/2006, 12h04
  2. problème de recherche dans une base de données
    Par bouzid_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 07h47
  3. [ postgresql - php ] problèmes de connexion a une base
    Par diableblanc dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/07/2005, 20h27
  4. problème de connexion avec une base firebird
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/05/2005, 12h40
  5. [VB.NET] Problème d'installation d'une appli VB.NET
    Par ppzmr dans le forum Windows Forms
    Réponses: 6
    Dernier message: 26/11/2004, 11h09

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