我想编写一个辅助函数start
,它为我启动池线程,但在实际后台处理在同一个池线程中开始之前还添加了一些代码。所以后台线程必须做一些额外的工作。我会经常调用start
,额外的代码可能会改变。所以我想为池线程创建一个有点工厂。
这甚至可能吗?如果是,我将如何将代码“注入”线程?
我试过了:
class Program
{
private static void test()
{
Console.WriteLine("hello world");
}
private static void start1(Action param1)
{
ThreadPool.QueueUserWorkItem(o =>
{
// extra work is here
param1.Invoke(); // starts another subthread ?
});
}
private static void start2(WaitCallback param1)
{
ThreadPool.QueueUserWorkItem(param1);
}
static void Main(string[] args)
{
start1(new Action(test));
start2(o => { test(); });
Console.ReadKey();
}
}
答案 0 :(得分:1)
ThreadPool.QueueUserWorkItem(o =>
{
ExtraWork();
param1.Invoke();
});
相当于
ThreadPool.QueueUserWorkItem(o =>
{
ExtraWork();
param1();
});
调用委托不会启动新线程。 (为什么你认为它可能?)所以这段代码工作正常。它将按顺序调用这两个函数。
答案 1 :(得分:0)
您无法随机添加。由字符串值运行的网络代码。除非您使用编译器并获取代码,将其编译为DLL然后使用反射调用它我不知道如何完成它。如果这就是你所需要的,我很害怕问你到底该怎么做。
如果您不需要随机代码,但具体功能很好,那就是您的幸运日。函数可以作为参数传递。你也可以构建一个函数列表来按顺序调用并执行它。你需要做更多的搜索,我多年没有这样做了。或者也许堆叠器可以评论并添加链接到好文章。
如果代码需要随机生成并且不被强制为.net,示例列出目录中的文件,打开程序。那么你可以看看脚本语言。最糟糕的情况是,您可以动态构建.vbs(Visual Basic脚本)并运行它。然后等待它为结果创建一个文本文件并读取它以了解发生了什么。