.net C#4.0如何将变量传递给线程?

.net C#4.0如何将变量传递给线程?,.net,multithreading,c#-4.0,.net,Multithreading,C# 4.0,如何将一些参数传递给从另一个类运行函数的新线程? 我试图做的是将一个数组或多个变量传递给另一个类中的函数,该函数由一个新线程调用 我试过这样做> Functions functions = new Functions(); string[] data; Thread th = new Thread(new ParameterizedThreadStart(functions.Post())); th.Start(data); 但它显示错误“方法'Post'

如何将一些参数传递给从另一个类运行函数的新线程? 我试图做的是将一个数组或多个变量传递给另一个类中的函数,该函数由一个新线程调用

我试过这样做>

    Functions functions = new Functions();

    string[] data;

    Thread th = new Thread(new ParameterizedThreadStart(functions.Post()));

    th.Start(data);
但它显示错误“方法'Post'不重载0个参数”

有什么想法吗

直接的答案是:

 new Thread(new ParameterizedThreadStart(functions.Post/*(remove)*/));
职位和职能。职位应采用以下形式:

 void Post(object state) { string[] data = (string[]) state; .... }
如果您已经有一个固定的
void Post(string[]data)
,您可以向Functions类添加一个包装器:

 void Post2(object state) { Post((string[]) state); }
但是在使用Fx4时,您应该真正查看任务库。

直接的答案是:

 new Thread(new ParameterizedThreadStart(functions.Post/*(remove)*/));
职位和职能。职位应采用以下形式:

 void Post(object state) { string[] data = (string[]) state; .... }
如果您已经有一个固定的
void Post(string[]data)
,您可以向Functions类添加一个包装器:

 void Post2(object state) { Post((string[]) state); }

但是在使用Fx4时,您应该真正查看任务库。

因为您有标记为C#4的任务库,所以新的方法是:

Functions functions = new Functions();

string[] data = GetData();

Task.Factory.StartNew( () => functions.Post(data) );

如果您真的想使用专用线程而不是任务并行库来完成此任务,您可以。根据您的注释,它听起来像是
Post()
可能被定义为
Post(string[]data)
。这将不起作用,因为
ParameterizedThreadStart
希望方法是
Post(对象数据)

但是,您可以通过lambdas并使用而不是ParameterizedThreadStart解决此问题,而无需更改您的方法:

Functions functions = new Functions();
string[] data = GetData();
Thread th = new Thread( () =>
    {
        functions.Post(data);
    });
th.Start();

由于您已将此标记为C#4,因此新的方法是:

Functions functions = new Functions();

string[] data = GetData();

Task.Factory.StartNew( () => functions.Post(data) );

如果您真的想使用专用线程而不是任务并行库来完成此任务,您可以。根据您的注释,它听起来像是
Post()
可能被定义为
Post(string[]data)
。这将不起作用,因为
ParameterizedThreadStart
希望方法是
Post(对象数据)

但是,您可以通过lambdas并使用而不是ParameterizedThreadStart解决此问题,而无需更改您的方法:

Functions functions = new Functions();
string[] data = GetData();
Thread th = new Thread( () =>
    {
        functions.Post(data);
    });
th.Start();

现在我得到了“没有重载,因为'Post'匹配委托'System.Threading.ParameterizedThreadStart'”@Aviatrix:你能为函数.Post()发布你的代码(或者至少是sig.)吗?@Aviatrix,我还在编辑一点,也许上一个版本有帮助。但是我是里德的,请发布大纲。问题很可能是“post”没有采用对象,而是采用字符串[]作为参数……现在我得到了“post”没有重载匹配委托“System.Threading.ParameterizedThreadStart”。@Aviatrix:您可以发布函数的代码(或至少是sig。).post()?@Aviatrix,我还在编辑一点,也许最后的版本会有所帮助。但是我是Reed的,请发布提纲。问题很可能是“post”的参数不是对象,而是字符串[]……请注意,代码的真正问题是调用post方法,而不是将其传递给委托构造函数。您应该在functions.Post()后面省去括号,这样就可以编译了。请注意,代码的真正问题在于您调用的是Post方法,而不是将其传递给委托构造函数。您应该在functions.Post()后面省去括号,这样就可以编译了。