Как создать поток и разобрать параметр в C # 2.0 - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть метод 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 ]

1 голос
/ 20 декабря 2011

Вы не можете получить доступ к объекту пользовательского интерфейса из другого потока, чем он был создан. Каждый Control имеет метод Invoke, который выполняет делегат в потоке пользовательского интерфейса. Например, если вам нужно обновить индикатор выполнения:

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

Так что вам просто нужно использовать конструктор потока, который принимает делегат ParameterizedThreadStart .

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

...

private static void StartProcess(object progressBar) {
    Blacklist.Process((ProgressBar)progressBar);
}
1 голос
/ 20 декабря 2011

Можете ли вы создать класс для передачи вашего параметра, например

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();
1 голос
/ 20 декабря 2011

вы пробовали:

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