Вызов метода несколькими потоками одновременно и отчет о продвижении каждого потока - PullRequest
0 голосов
/ 16 июня 2011

Я хочу создать Windows-приложение на C #, которое будет вызывать метод несколькими потоками одновременно. И сообщать о запуске и завершении каждого потока на экране Windows.

Метод, который нужно вызвать, принимает два параметра и возвращает объект.

Пожалуйста, помогите.

Ответ будет высоко оценен.

Заранее спасибо.

1 Ответ

1 голос
/ 16 июня 2011

С http://www.albahari.com/threading/#_Entering_the_Thread_Pool_via_TPL

static void Main()
{
    Func<string, int> method = Work;
    method.BeginInvoke ("test", Done, method);
   // ...
   //
}

static int Work (string s) { return s.Length; }

static void Done (IAsyncResult cookie)
{
    var target = (Func<string, int>) cookie.AsyncState;
    int result = target.EndInvoke (cookie);
    Console.WriteLine ("String length is: " + result);
}

По сути, «Работа» - это метод, который вы хотите запустить в другом потоке. «Готово» - это метод, который вы хотите вызвать, когда «Работа» завершена - вы должны указать здесь свой код сообщения о состоянии. method.BeginInvoke принимает те же параметры, что и Work, плюс два других параметра: обратный вызов и информация о состоянии, которая может быть любой, какой вы захотите. Функция обратного вызова должна принимать один параметр: IAsyncResult. Вы можете получить доступ к информации о состоянии, которую вы передаете, получив AsyncState от IAsyncResult. В приведенном выше примере «цель» означает то же самое, что и «метод». Это полезно - это означает, что вы можете вызвать «EndInvoke» для метода / цели, что даст вам возвращаемое значение, которое вам нужно. «result» - это возвращаемое значение «Work».

Если вам нужно несколько потоков, просто имейте несколько делегатов (как «метод» в приведенном выше примере), и BeginInvoke запускайте их все, один за другим. Вы можете сделать так, чтобы все они имели одинаковый обратный вызов, или они могут иметь разные обратные вызовы Вам решать.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...