2016-05-08 4 views
0

Я уже сделал консоль для подачи звукового сигнала 4 раза с разными частотами, а затем для обратного отсчета от 5 до 1. Но теперь я хочу, чтобы эти два события происходили одновременно - звуковой сигнал и в то же время отобразите номер. Я не могу найти ответ на этот вопрос в Google, и попытка непрофессионала написать обе команды на одной линии не приведет ни к чему хорошему. Итак, есть ли возможный способ сделать это, или консоль не поддерживает одновременные события?одновременные события в консоли C#

ответ

0

Мм, вам нужно использовать System.Threading

static void Main() 
{ 
    Thread t = new Thread (beep); 
    t.Start(); 
    Console.WriteLine("Your text"); 
} 

static void beep() 
{ 
    //beep function here 
} 
0

Да, вы могли бы сделать это.

Предположим, что у вас есть два способа: Beep() и PrintNumber(int number). Затем вы должны иметь цикл for, чтобы сделать звук несколько раз.

for(int i = 0; i < 5; ++i) 
{ 
    Beep(); 
    PrintNumber(i); 
} 

Этот код произведет звук, а затем напечатает номер. Затем вам необходимо выполнить эти методы в разных потоках. Чтобы создать новый поток и запустить в нем некоторый код, вам нужно использовать Tasks. Чтобы создать задачу, вам необходимо использовать завод:

Task.Factory.StartNew(action); 

И передайте там действие, которое необходимо выполнить. Таким образом, полное решение в вашем случае

using System; 
using System.Threading.Tasks; 

namespace ConsoleApp 
{ 
    class ConsoleApp 
    { 
     public static void Beep() 
     { 
      // make sound 
     } 

     public static void PrintNumber(int number) 
     { 
      Console.WriteLine(number); 
     } 

     public static void Main(string[] args) 
     { 
      var printTask = Task.Factory.StartNew(
       () => 
       { 
        for (int i = 0; i < 10; ++i) 
         PrintNumber(i); 
       }); 

      var beepTask = Task.Factory.StartNew(
       () => 
       { 
        for (int i = 10; i > 0; --i) 
         Beep(); 
       }); 

      printTask.Wait(); 
      beepTask.Wait(); 
     } 
    } 
} 

Где () => {} является нотацию, чтобы написать лямбда-выражения - небольшие куски кода без определения метода.

+0

Почему вы это делаете в одно и то же время? Я могу ухаживать за ним. –

+0

@JerrySwitalski это то, как это работает на моей машине - запуск потока начинается после создания новой задачи. Я могу видеть смешанный вывод в консоли, если я добавлю метод Console.WriteLine to Beep. Не могли бы вы объяснить, почему он не будет работать одновременно? – cassandrad

+0

Я вижу, извините за поздний ответ - так что я думаю, что я ошибся, если он протестирован. ура –

Смежные вопросы