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.
13 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 10,980 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


Votre réponse

Les réponses peuvent être marquées comme Réponses acceptées par l’auteur de la question, ce qui permet aux utilisateurs de connaître la réponse qui a résolu le problème de l’auteur.