Что я могу создать в потоке с функцией с параметрами? - PullRequest
3 голосов
/ 01 августа 2011

Что я могу создать в потоке с функцией с параметрами?

Thread t = new Thread(new ParameterizedThreadStart(fetchQuotes(cp)));

void fetchQuotes(SomeObject obj)
{
    [DoSomething With SomeObject] 
}

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Я добавлю сюда синтаксис TPL для полноты (см. Мой предыдущий комментарий).

Task task = new Task(() => FetchQuotes(arg));
task.Start();

Библиотека заданий имеет множество опций для запуска в вызывающем потоке или асинхронности в одном или нескольких потоках и т. Д. http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx

1 голос
/ 01 августа 2011

Самый простой подход здесь - использовать замыкание над непараметрической (ThreadStart) подписью:

Thread t = new Thread(() => fetchQuotes(cp));
...
t.Start();

Это статическая проверка на корректность во время компиляции, и это удобно (например, вы можете передать любое количество параметров).

Другой подход заключается в передаче object в качестве параметра (ParameterizedThreadStart):

Thread t = new Thread(fetchQuotes);
...
t.Start(cp);
...
void fetchQuotes(object obj)
{
    SomeObject obj2 = (SomeObject) obj;
    [DoSomething With SomeObject] 
}

здесь мы передаем object, поэтому не проверяем тип во время компиляции. Ошибки "braindead" появятся только во время выполнения.

...