我有一个方法及其委托,用于从我的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();
}
}
这个功能很棒,我只需要从任何一个线程中调用TextAppend(myTextBox1, "Hi Worldo!"),就可以更新GUI。现在,有没有一种方法可以将调用TextAppend的委托传递给我的另一个项目中的某个实用程序方法,而不发送任何对实际TextBox的引用,像这样从调用者的角度看:
Utilities.myUtilityMethod(
new delegate(string str){ TextAppend(myTextBox1, str) });
在被调用方,可以使用类似如下定义的方式:
public static void myUtilityMethod(delegate del)
{
if(del != null) { del("Hi Worldo!"); }
}
当调用此函数时,它会使用该字符串和调用者想要使用的预定义 TextBox 调用 TextAppend 方法。这种做法可行吗?还是我太疯狂了?我知道有更简单的选择,比如使用接口或传递 TextBox 和委托,但我想探索这种解决方案,因为它似乎更优雅,并且可以隐藏来自被调用者的信息。问题是,我在 C# 中还是太菜了,几乎不理解委托,请帮我处理一下实际的语法,谢谢!
myUtilityMethod
如何知道它必须将单个字符串传递给委托?您希望它如何获取要传递的字符串? - Enigmativity