如何在C#2.0中创建线程并解析参数

时间:2011-12-20 02:11:45

标签: c# thread-safety

我在课程黑名单

中有一个方法Process(Progressbar)

我试着用这个:

Thread thread = new Thread(() => Blacklist.Process(pgImportProcess));

发生错误

C#3.0语言功能

So how can i create a thread and parse progressbar as a parameter?

提前感谢

3 个答案:

答案 0 :(得分:1)

你试过了吗?

void Invoker(){
    ParameterizedThreadStart pts = Start;
    Thread thread = new Thread(pts);
    thread.Start(new object());
}
public void Start(object o)
{
    //do stuff
}

答案 1 :(得分:1)

您无法从与创建时不同的线程访问UI对象。每个Control都有一个Invoke方法,它将在UI线程上执行委托。例如,如果您需要更新进度条进度:

progressBar.Invoke(new Action(){()=> progressBar.Value = updateValue;});

所以你只需要使用Thread constructor that takes a ParameterizedThreadStart委托。

Thread thread = new Thread(StartProcess);
thread.Start(pgImportProcess);

...

private static void StartProcess(object progressBar) {
    Blacklist.Process((ProgressBar)progressBar);
}

答案 2 :(得分:1)

您可以创建一个类来传递参数,如

public class Sample
{
    object _value;

    public Sample(object value)
    {
        this._value = value;
    }

    public void Do()
    {
        // dosomething
        // Invoke the Process(value)  
    }
}

然后

Sample p = new Sample("your parameter : Progressbar");
new Thread(new ThreadStart(p.Do)).Start();