Voici mon problème

WiinK Messages postés 23 Date d'inscription mercredi 15 septembre 2010 Statut Membre Dernière intervention 23 septembre 2010 - 15 sept. 2010 à 23:30
 Utilisateur anonyme - 17 sept. 2010 à 15:07
Bonjour vbfrance,
Voici mon problème :

J'ai besoin que pour toutes les méthodes d'une classe, il s'effectue une action avant et après l'exécution du code.
Pour exemple, là c'est un loader que je doit activer dans chaque méthodes d'une classe (car il y a d'assez conséquents requetages linq qui freezent l'application quelques secondes).

Il y a un design pattern qui répond a ça ? Ou des events particuliers utilisables ?

Merci pour vos conseils

(J'ai aussi posté en section C#, mais le problème serait aussi valable en VB.NET)

1 réponse

Utilisateur anonyme
17 sept. 2010 à 15:07
Salut,
Tu peux te servir des événements.
Voici un exemple d'une classe simple les utilisant :
Public Class clsMaClasse
    Public Event AvantEvent As AvantDelegate
    Public Event ApresEvent As ApresDelegate
    Public Delegate Sub AvantDelegate(ByVal sender As Object, ByVal e As clsEventArgs)
    Public Delegate Sub ApresDelegate(ByVal sender As Object, ByVal e As clsEventArgs)

    Public Sub MaMethode1()
        'code
        ' ....
        RaiseEvent AvantEvent(Me, New clsEventArgs(0, "debut"))
    End Sub

    Public Sub MaMethode2()
        'code
        '...
        RaiseEvent AvantEvent(Me, New clsEventArgs(1, "debut"))
    End Sub

    Public Sub Execution()
        'code
        '...
        RaiseEvent ApresEvent(Me, New clsEventArgs(-1, "fin"))
    End Sub

    Public Class clsEventArgs
        Private _arg1 As String
        Private _arg2 As String

        Public Sub New(ByVal Arg1 As Integer, ByVal Arg2 As String)
            _arg1 = Arg1
            _arg2 = Arg2
        End Sub

        Public ReadOnly Property Arg1() As Integer
            Get
                Return _arg1
            End Get
        End Property

        Public ReadOnly Property Arg2() As String
            Get
                Return _arg2
            End Get
        End Property
    End Class
End Class


Voici maintenant comment tu pourrait l'utiliser dans ton cas :

Public Class Form1
    Private MaClasse As New clsMaClasse

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'on rajoute les handlers avant et apres
        AddHandler MaClasse.AvantEvent, AddressOf Avant
        AddHandler MaClasse.ApresEvent, AddressOf Apres

        'on fait executer methode 1
        MaClasse.MaMethode1()


        'puis methode 2

        MaClasse.MaMethode2()

    End Sub

    Private Sub Avant(ByVal sender As Object, ByVal e As clsMaClasse.clsEventArgs)
        MessageBox.Show(e.Arg1 & ": " & e.Arg2)
        'code a executer avant a mettre ci-dessous (ton loader)
        '....
        MaClasse.Execution()
    End Sub

    Private Sub Apres(ByVal sender As Object, ByVal e As clsMaClasse.clsEventArgs)
        MessageBox.Show(e.Arg1 & ": " & e.Arg2)
        'code a executer après l'execution de la classe
    End Sub
End Class


Bien entendu, il est possible de mettre autant d'arguments que tu veux dans ta classe afin de les récupérer lors des événements.

A bientôt.
0
Rejoignez-nous