Bonjour,

Je travaille avec une instance d'un objet.

Dans cette instance, j'ai un object qui émet des évènements.

Les événement sont traités dans un gestionnaire d'événement qui est static : du coup il ne peut pas interragir avec mon instance.

Comment faire ?

Voici le squelette :
Code csharp : 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
 
    public class TestRunProc
    {
        StringBuilder sb;
        public string ResponseText
        {
            get
            {
                return sb.ToString();
            }
        }
        public TestRunProc()
        {
            sb = new StringBuilder();
        }
        public void WriteMessage(string message)
        {
            sb.AppendFormat("\t{0}\n", message);
        }
        public void Run()
        {
            using (SqlConnection cnx = new SqlConnection("..."))
            {
                cnx.Open();
                cnx.InfoMessage += Cnx_InfoMessage; // Là ici
                cnx.FireInfoMessageEventOnUserErrors = true;
 
                using (SqlCommand cmd = cnx.CreateCommand())
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "...";
 
                    sb.AppendLine("Lancement de la procédure...");
                    cmd.ExecuteNonQuery();
                    sb.AppendLine("La procédure a terminé sans encombre...");
                }
 
                cnx.Close();
            }
        }
 
        private static void Cnx_InfoMessage(object sender, SqlInfoMessageEventArgs e)
        {
            TestRunProc process = sender as TestRunProc; // Le souci c'est que c'est pas mon TestRunProc que je récupère, mais le SqlConnection...
 
            foreach (SqlError error in e.Errors)
            {
                if (error.Class != 0)
                {
                    process.WriteMessage("Une erreur non bloquante s'est produite.");
                }
                process.WriteMessage(error.Message);
            }
        }
    }