Délégué avec les paramètres... en tant que paramètre

J'ai cette méthode avec son délégué, qui est utilisé pour ajouter du texte à une zone de texte multiligne dans l'interface utilisateur graphique de l'un des threads dans mon application WinForms:

private delegate void TextAppendDelegate(TextBox txt, string text);
public void TextAppend(TextBox txt, string text)
{
  if(txt.InvokeRequired)
    txt.Invoke(new TextAppendDelegate(TextAppend), new object[] {txt, text });
  else
  {
    if(txt.Lines.Length == 1000)
    {
      txt.SelectionStart = 0;
      txt.SelectionLength = txt.Text.IndexOf("\n", 0) + 1;
      txt.SelectedText = "";
    }
    txt.AppendText(text + "\n");
    txt.ScrollToCaret();
  }
}

Il fonctionne très bien, je viens de l'appeler TextAppend(myTextBox1, "Hi Worldo!") à partir de n'importe quel thread et l'interface graphique est mis à jour. Maintenant, est-il un moyen de passer un délégué qui invoque TextAppend à l'un de mes méthodes utilitaires dans un autre projet sans l'envoi de toute référence à la réalité de zone de texte, quelque chose qui pourrait ressembler à ceci à partir de l'appelant:

Utilities.myUtilityMethod(
    new delegate(string str){ TextAppend(myTextBox1, str) });

Et le destinataire de l'appel, une définition similaire:

public static void myUtilityMethod(delegate del)
{
    if(del != null) { del("Hi Worldo!"); }
}

De sorte que lorsque cette fonction est appelée, elle appelle la TextAppend méthode avec cette chaîne et la prédéfinis zone de texte à l'appelant veut utiliser. Est-ce possible ou suis-je fou? Je sais qu'il ya moyen plus facile des options comme l'utilisation d'interfaces ou de passer la zone de texte et de déléguer, mais j'ai envie d'explorer cette solution car il semble plus élégant et cache des trucs à partir de l'appelé. Le problème est que je suis encore trop novice en C# et à peine à comprendre les délégués, de sorte s'il vous plaît aidez-moi avec la syntaxe qui fonctionne.

Merci d'avance!

Quelle est la version de .NET/C#?
Tu ne peux pas déplacer la totalité de la TextAppend méthode dans votre classe utilitaire, puis procédez de l'Utilitaire.TextAppend(MyTextbox, "foo") de l'appelant(s)?
Un couple de questions afin de mieux comprendre vos besoins. Comment vous attendez-vous de votre myUtilityMethod de savoir qu'il a de passer d'une chaîne unique à votre délégué? Et comment vous attendez-vous à obtenir de la chaîne à transmettre?
D'azur à La version 3.5
si vous déplacez TextAppend dans la classe Utilitaire vous n'avez pas besoin de passer un délégué à cause TextAppend serait de créer. Vous venez de passer une référence à une zone de texte et la chaîne que vous souhaitez ajouter. sonne comme une parfaite utilisation d'une méthode utilitaire pour moi (je voudrais également probablement une méthode d'extension sur la zone de texte de la classe).

OriginalL'auteur R. Ruiz. | 2011-10-27