在c#中动态选择线程数

本文关键字:线程 选择 动态 | 更新日期: 2023-09-27 18:12:01

我正在尝试根据程序收到的值创建几个线程。我使用以下代码:

int count = 7;
Class1 cl=new Class1();
for (int i = 0; i < count; i++)
{
    BackgroundWorker bw = new BackgroundWorker();
    bw.DoWork += new DoWorkEventHandler(delegate(object o, DoWorkEventArgs argss)
    {
        BackgroundWorker b = o as BackgroundWorker;
        cl.print("id","password");
    });
}
Console.ReadLine();

在class1的print()方法中,我打印了一行"Just entered print function"

但是当我运行程序时,没有打印任何行

在c#中动态选择线程数

你需要启动后台线程。

class Program
    {
        static void Main()
        {
            int count = 7;
            Class1 cl = new Class1();
            for (int i = 0; i < count; i++)
            {
                BackgroundWorker bw = new BackgroundWorker();
                bw.DoWork += new DoWorkEventHandler(
                delegate(object o, DoWorkEventArgs argss)
                {
                    BackgroundWorker b = o as BackgroundWorker;
                    cl.Print("id", "password");
                });
                bw.RunWorkerAsync();//Start the background here
            }
            Console.ReadLine();
        }
    }
    class Class1
    {
        public void Print(string id, string password)
        {
            Console.WriteLine("Id:{0},Password:{1}", id, password);
        }
    }

根据BackgroundWorker类的MSDN文档,您需要通过调用RunWorkerAsync

来启动它。
bw.RunWorkerAsync();

在SO上询问之前请先检查文档

如果你使用的是。net 4.5,你可以节省一些按键,使用TPL

for (int i = 0; i < count; i++)
{
    Task.Run(() => cl.Print("id","password"));      
}