dotnet cocoa modifier UI depuis un thread secondaire ?

Gilbert Tordeur 146 Points de réputation
2024-01-26T14:40:10.18+00:00

Bonjour.
J'écris une application cocoa en C# avec Visual Studio for Mac 17.6.3. Certaines méthodes effectuent de longs calculs, et j'aimerais afficher l'avancement de ces calculs. Je trouve plusieurs solutions sur Internet, mais qui s'appliquent à VDS pour Windows. Par exemple :

private void btnUpdate_Click(object sender, EventArgs e)
{
    Task.Run(() =>
    {
        string text = "Updated from another thread";
        this.Invoke((MethodInvoker)delegate
        {
            labelResult.Text = text;
        });
    });
}

Problème : MethodInvoker n'est pas reconnu (nom de type introuvable). Quelqu'un pourrait-il me donner le petit bout de code qui fait ça correctement ? Merci d'avance.

C#
C#
Langage de programmation orienté objet et sécurisé au niveau des types, qui prend ses racines dans la famille des langages C et inclut la prise en charge de la programmation orientée vers les composants.
10 questions
{count} votes

Réponse acceptée
  1. Omar Kefi (Convergys Corporation) 340 Points de réputation Fournisseur Microsoft
    2024-01-26T20:58:05.2733333+00:00

    Bonjour,

    Merci d'avoir sollicité la communauté Q&A France.

    Est-ce que le problème persiste avec la version 17.6.8?

    Cordialement,

    Omar,

    Si cette réponse a répondu à votre question, veuillez « Accepter comme réponse » et voter en utilisant « Pouce levé » afin que la pertinence de ce message s’améliore lorsque quelqu’un dans la communauté recherche une requête similaire.

    0 commentaires Aucun commentaire

5 réponses supplémentaires

Trier par : Le plus utile
  1. Alexis Thorez (CONCENTRIX CORPORATION) 5 910 Points de réputation Fournisseur Microsoft
    2024-02-14T10:01:12.6533333+00:00

    Réponse fournie par @Gilbert Tordeur

    J'ai fini par trouver en demandant à Bing. Après plusieurs mauvaises réponses, il a fini par me proposer ceci, qui fonctionne correctement :

            private void btnUpdate_Click(object sender, EventArgs e)
            {
                Task.Run(() =>
                {
                    for (int i = 0; i < 10; i++)
                    {
                        Thread.Sleep(1000);
                        string text = i.ToString();
                        BeginInvokeOnMainThread(() =>
                        {
                            labelResult.StringValue = text;
                        });
                    }
                });
            }
    
    

    Merci encore et bonne journée. Gilbert