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.

Technologies de développement | C#
Technologies de développement | 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.


Réponse acceptée par l’auteur de la question
Omar Kefi (Convergys Corporation) 420 Points de réputation Personnel externe 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.

Cette réponse a-t-elle été utile ?

0 commentaires Aucun commentaire

5 réponses supplémentaires

  1. Alexis Thorez 11,065 Points de réputation
    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

    Cette réponse a-t-elle été utile ?


Votre réponse

Les réponses peuvent être marquées comme « Acceptées » par l’auteur de la question et « Recommandées » par les modérateurs, ce qui aide les utilisateurs à savoir que la réponse a résolu le problème de l’auteur.