Как передать управление другому потоку? - C#

Узнай цену своей работы

Формулировка задачи:

Всем добрый день, есть такой вопрос, не знаю как решить. В чем суть, у меня есть основной поток, в котором создаю объект определенного класса (использую паттерн Singleton). У класса есть методы. Затем, создаются вторичные потоки. Из вторичного потока должен вызываться метод того класса, объект которого был создан в основном потоке. НО НЕ ПРОСТО ВЫЗВАТЬ НА ИСПОЛНЕНИЕ ЭТОТ МЕТОД (это довольно просто), а чтобы этот метод исполнился в ОСНОВНОМ потоке, а не во вторичном! Скажите, есть ли какое нибудь решение, чтобы можно было передать метод на исполнению другому потоку, или нет? Вариант, с добавлением в очередь делегатов конечно можно сделать, и постоянно проверять в основном потоке не пришел ли делегат на исполнение, если пришёл, то явно вызвать метод, но хотелось более нормальное решение этой проблемы. Всем спасибо, если есть идеи, подскажите пожалуйста

Решение задачи: «Как передать управление другому потоку?»

textual
Листинг программы
   //этот класс был создан в первичном потоке
   public class Class1
   {
      //этот метод работает во вторичном потоке
      // и заставляет Method2 исполниться в первичном потоке
      public void Method1()
      {
         //способ1:
         Task task = new Task(Method2);
         TaskScheduler scheduler = TaskScheduler.FromCurrentSynchronizationContext();
         task.Start(scheduler); //асинхронное выполнение в основном потоке
 
         //способ 2:
         SynchronizationContext context = SynchronizationContext.Current;
         context.Post(x => Method2(), null); //асинхронное выполнение в основном потоке
      }
 
      //этот метод надо выполнить в первичном потоке
      public void Method2()
      {
 
      }
   }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы