.Net: Получение данных из потоков - PullRequest
1 голос
/ 01 апреля 2009

Это Easy Q, но отличная помощь:

Под заголовком " Получение данных из потоков MSDN ( Здесь ) представляет способ получения данных из дочернего потока с помощью метода обратного вызова, который инкапсулируется делегатом, переданным из основного потока. дочернему потоку - у кого есть данные.

Это хорошо видно (последний пример в MSDN страница )

Мой вопрос таков: поскольку мы занимаемся извлечением данных (из дочерних потоков в основной поток), метод обратного вызова должен выполняться главным потоком, а не дочерним потоком ...

Я немного изменил код (чтобы убедиться в этом), поэтому я прикреплял имя потока перед каждым выводом:

 public static void ResultCallback(int lineCount) {
    Console.WriteLine(Thread.CurrentThread.Name + ":Independent task printed {0} lines.", lineCount);  
}

И я назвал дочерний поток: «Method2», а основной поток «System» ...

Я получил этот вывод: Method2 : Независимое задание напечатало 1 строку.

где правильный вывод должен был быть: Система : Независимое задание напечатано в 1 строку.

Кто здесь пьян? MSDN, я или .NET?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2009

Если вы не хотите / не должны использовать обратные вызовы, а данные довольно малы, вы всегда можете использовать общую память и ключевое слово C # lock.

Maciej.

0 голосов
/ 01 апреля 2009

"Ты"; -p

Обратные вызовы все еще выполняются в рабочем потоке; они предоставляют данные обратно вызывающему коду , но у них нет встроенного способа прерывания вызывающего потока . Ваш код отвечает за возвращение этой работы в главный поток, если это необходимо. Например, в приложении winforms у вас может быть:

public static void ResultCallback(int lineCount) {
  // runs on worker thread
  Invoke((MethodInvoker)delegate {
      // runs on UI thread
      Console.WriteLine(Thread.CurrentThread.Name +
         ":Independent task printed {0} lines.", lineCount);
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...