开发者

C# 4.0 how to pass variables to threads?

How would i pass some parameters to a new thread that runs a function from another class ? What i'm trying to do is to pass an array or multiple variables to a function that sits in another class and its called by a new thread.

i have tried to do it like this >

    Functions functions = new Functions();

    string[] data;

    Thread th = new Thread(new ParameterizedThreadStart(functions.P开发者_StackOverflow中文版ost()));

    th.Start(data);

but it shows error "No overload for method 'Post' takes 0 arguments"

Any ideas ?


Since you have this flagged C# 4, the new approach to this would be:

Functions functions = new Functions();

string[] data = GetData();

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

If you really want to leave this using a dedicated thread, and not the Task Parallel library, you can. Given your comments, it sounds like Post() is probably defined as Post(string[] data). This will not work since ParameterizedThreadStart expects the method to be Post(object data).

You can work around this via lambdas and using ThreadStart instead of ParameterizedThreadStart, however, without changing your methods:

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


The direct answer is :

 new Thread(new ParameterizedThreadStart(functions.Post/*(remove)*/));

and Functions.Post should be of the form:

 void Post(object state) { string[] data = (string[]) state; .... }

If you already have a fixed void Post(string[] data) you could add a wrapper to the Functions class:

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

But when using Fx4 you should really take a look at the Task library.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜