Bonjour ,

J'ai dans une Form, une ComboBox qui, lors d'un clic sur celle ci, effectue une requête pouvant s'avérer longue. C'est pourquoi j'aimerais passer la main à l'UI le temps que cette requête s'effectue. J'ai essayé d'utilisé Async et Await mais impossible de trouver la bonne combinaison, sachant que j'ai comme erreur "Impossible d'attendre ADODB.Recordset" .

Voici mon code en synchrone :

-Code du trigger sur la CB :
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
 
        private void CBBat_DropDown(object sender, EventArgs e)
        {
            String requete;
            String connect;
            ADODB.Recordset rs = new ADODB.Recordset();
 
              if (this.CBBat.Items.Count == 0) 
                {
                        connect = "chaine de connexion";
                        requete = "Ma requete";
                        try
                        {
 
                            rs = ReqBDD(connect, requete, 15);
                            if (rs.EOF == false)
                            {
                                rs.MoveFirst();
                                while (rs.EOF == false)
                                {
                                    if ((Convert.ToString(rs.Fields["Champ1"].Value)) != String.Empty) { this.CBBat.Items.Add(rs.Fields["Champ1"].Value); }
                                    rs.MoveNext();
                                }
 
                            }
                            rs.Close();
                        }
                        catch
                        {
                            MessageBox.Show("erreur");
                        }
 
                 }
        }
Et voici le code de la fonction ReqBDD :

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
 
        private ADODB.Recordset ReqBDD(String connect, String requete, int TimeOut)//Fonction ReqBDD
        {
            ADODB.Recordset rs = new ADODB.Recordset();
            try
            {
                ADODB.Connection cn = new ADODB.Connection();
 
                cn.ConnectionString = connect;
                cn.ConnectionTimeout = TimeOut;
                cn.CommandTimeout = TimeOut;
                cn.Open(connect, "", "", -1);
 
                rs.ActiveConnection = cn;
                rs.Open(requete, cn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockBatchOptimistic, 1);
            }
 
            catch (Exception ex)
            {
                MessageBox.Show("Erreur SQL avec l'exception : " + ex);
            }
 
                return rs;
        }
L'idée est d'exécuter la fonction ReqBDD de manière asynchrone, comment pourrais-je adapter ce code avec Async et Await ?

Merci d'avance et bonne journée.