C# - 如何在启动后台线程之前将代码添加到后台线程中

本文关键字:后台 线程 代码 添加 启动 | 更新日期: 2023-09-27 18:36:39

我想编写一个帮助程序函数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();
    }
}

C# - 如何在启动后台线程之前将代码添加到后台线程中

    ThreadPool.QueueUserWorkItem(o =>
        {
            ExtraWork();
            param1.Invoke();
        });

相当于

    ThreadPool.QueueUserWorkItem(o =>
        {
            ExtraWork();
            param1();
        });

调用委托不会启动新线程。(你为什么认为它可能?所以这段代码可以正常工作。它将按顺序调用这两个函数。

不能添加随机。 按字符串值运行的网络代码。除非您使用编译器并获取代码,将其编译为 DLL,然后用反射调用它,否则我看不出如何做到这一点。如果这就是你需要的,我很害怕问你到底需要怎么做。

如果您不需要随机代码,但需要特定的功能,那么这是您的幸运日。函数可以作为参数传递。您还可以构建一个函数列表,以便按顺序调用并执行此操作。你需要对此进行更多的搜索,我已经很多年没有这样做了。或者,也许其他堆叠者可以发表评论并添加指向好文章的链接。

如果代码需要随机生成并且不强制为.net,则示例在目录中列出文件,打开程序。好吧,你可以研究脚本语言。在最坏的情况下,您可以动态构建.vbs(Visual Basic Script)并运行它。然后等待它为结果创建一个文本文件并阅读它以了解发生了什么。