【发布时间】:2012-11-06 19:22:57
【问题描述】:
好吧,伙计们,请不要因为我问这个问题而对我大发雷霆。
// 使用 System.Threading;
private void startThread()
{
Thread t = new Thread(ParameterizedThreadStart(setOutputBinaryWorker));
t.Start();
}
由于 setOutputBinaryWorker 是一个实际存在的方法,所以这可以正常工作。但是,我正在寻找一种将函数名称作为变量传递给 startThread 函数的方法。
由于我有限的 C# 经验,我怀疑这是可能的,但似乎无法弄清楚如何。我可以想象它应该是这样的:
// using System.Threading;
private void startThread(??datatype?? func)
{
Thread t = new Thread(ParameterizedThreadStart(func));
t.Start();
}
但我无法弄清楚数据类型应该是什么(使用问号)。 现在,在调试时,传递的函数名称弹出为
System.Object 无效,setOutputBinaryWorker
这并没有给我太多的继续。这些可以创建吗?尝试将参数转换为(对象),但不起作用。
这背后的主要思想是尝试使用安全的 gui 线程以正确的方式写入 ui 元素。 现在,我已经完成了那部分,使用委托方法,这一切都很好。但是当切换到当前方法(使方法名称可变)时,我完全迷失了。 如果有人知道替代、更好或至少可行的解决方案,我愿意接受建议,很重要。
提前感谢您的努力。
【问题讨论】:
-
你为什么不直接传入一个ParameterizedThreadStart?另外:对于 ParameterizedThreadStart 版本,您不需要将值传递给 Start 吗?
-
感谢您的快速回复,是的,我愿意。回答您的问题:这行不通,我需要传递函数名称,因为它将被包装在外部 dll 中。
-
你打算以这种方式调用什么样的方法?它们会有相同的签名和返回值吗?
-
这个想法是创建一个带有一些通用函数的dll文件。其中之一是创建 gui 线程的能力。这些方法的类型总是无效的。
标签: c# multithreading visual-studio-2010 pass-by-reference