Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

14 avril 2014 1 14 /04 /avril /2014 01:41
On parle d’Asynchrone partout, surtout avec  WinRT.On utilise les facilités offertes par le Framework pour effectuer des traitements asynchrones. Il est bon de ne pas oublier ses « bases ».

 

Le délégué

 

  public delegate string DoSomethingHandler(object sender,DoSomethingEventArgs e);

 

 

  public class DoSomethingEventArgs :EventArgs 
    {
        public object Result { get; set; }
        public DoSomethingEventArgs(object result)
        {
            this.Result = result;
        }
    }

 

 

        private void button1_Click(object sender, EventArgs e)
        {
            DoSomething += new DoSomethingHandler(DoSomethingMethod);
            DoSomething.BeginInvoke(this, new DoSomethingEventArgs(null), new AsyncCallback(Callback), null);
        }
        public void Callback(IAsyncResult result)
        {
            DoSomethingHandler handler = ((AsyncResult)result).AsyncDelegate as DoSomethingHandler;
            string message = handler.EndInvoke(result);
            //  
            this.Invoke(new Action(()=> { textBox1.Text = message; }));
        }
        private string DoSomethingMethod(object sender, DoSomethingEventArgs e)
        {
            // simule un traitement long  
            for (int i = 0; i < 5; i++)
            {
                Thread.Sleep(1000);
                 this.Invoke(new Action(()=> { listBox1.Items.Add(DateTime.Now.ToString("T"));}));
            }
           
            return "un résultat quelconque"; //  
        }
        public event DoSomethingHandler DoSomething;

 

 

Pour vérifier que l’UI n’est pas bloquée on peut rajouter un bouton permettant d’afficher un message

 

  private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("UI réactive !");
        }

 

Partager cet article

Repost 0
Published by Romagny13 - dans C
commenter cet article

commentaires