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

Trier par : Les plus récents
  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 ?


  2. Gilbert Tordeur 146 Points de réputation
    2024-02-14T09:44:02.3466667+00:00

    Bonjour. Je reçois un email d'Alexis : "... N'oubliez pas de marquer comme réponse votre solution ...". Mais je ne peux pas : un bouton "Accepter la réponse" est affiché sur chaque réponse, sauf celles dont je suis moi-même l'auteur. Or c'est moi qui ai fini par publier la bonne réponse. Dès lors, comment faire ?

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

    0 commentaires Aucun commentaire

  3. Gilbert Tordeur 146 Points de réputation
    2024-01-30T13:57:28.5466667+00:00

    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 ?

    1 personne a trouvé cette réponse utile.

  4. Omar Kefi (Convergys Corporation) 420 Points de réputation Personnel externe Microsoft
    2024-01-29T19:11:15.0566667+00:00

    Bonjour ,

    c'est mieux d'ajouter une référence à l’espace du nom Reflection, car c’est là d’après la documentation que la classe MethodInvoker.

    MethodInvoker Classe

    l’addition se fait avec Using .

    using System.Reflection;

    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 ?

    2 personnes ont trouvé cette réponse utile.
    0 commentaires Aucun commentaire

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.