none
Problème avec Async et Task

    Discussion générale

  • Bonjour

    Afin de rendre mon application "responsive" j'ai implanté une task de la façon suivante

    J'ai un événement lié à un menu :

    private async void MnuFicChargerGeoDb_Click(object sender, EventArgs e)
           {
               ListeToponymesGeoDb.Clear();
               Task<int> task = new Task<int>(ChargerGeoDb);
               task.Start();
               int count = await task;
               
           }

    La méthode ChargerGeoDb appelle une méthode ChoixFichierGeoDB

    public void ChoixFichierGeoDb()
            {
                var res = MessageBox.Show(new Form(),
                    "Choisissez le fichier GeoDB.",
                    "Choix du fichier source",
                    MessageBoxButtons.OKCancel,
                    MessageBoxIcon.Question);
     
     
                if (res == DialogResult.Cancel)
                    return;
     
                var ofd = new OpenFileDialog
                {
                    Filter = @"Fichier Source GeoDB (*.gdb) | *.gdb",
                    Title = @"Choix d'un fichier source GeoDB"
                };
     
                if (ofd.ShowDialog(new Form()) == DialogResult.OK)
                {
                    GlobalConfig.NomFichierGeoDb = ofd.FileName;
                    GeoDb.ConString = GlobalConfig.ConString("GeoDBConString").Replace("NomFichier", ofd.FileName);
                }
                ofd.Dispose();
            }

    Mais à l'exécution j'ai une exception 

    L'exception System.Threading.ThreadStateException s'est produite
      HResult=0x80131520
      Message=Le thread actuel doit être en mode STA (Single Thread Apartment) avant que des appels OLE puissent être effectués. Assurez-vous que votre fonction Main est marquée comme STAThreadAttribute. Cette exception n'est déclenchée que si un débogueur est attaché au processus.

    Mais mon Main a bien l'attribut demandé:

    [STAThread]
           static void Main()
           {
               Application.EnableVisualStyles();
               Application.SetCompatibleTextRenderingDefault(false);
               Application.Run(new FormGestionToponymes());
               //Application.Run(new DataGridViewColumnDemo());
           }
    

    Comment résoudre ce problème ?

    Merci

    Bernard

      

    Bernard Bouree

    vendredi 29 septembre 2017 15:30