2016-05-08 9 views
0

私は既に異なる周波数で4回ビープ音を鳴らし、その後は5から1にカウントダウンするようにコンソールを作っています。しかし、今はビープ音と同時に番号を表示します。私はGoogleでその答えを見つけることはできませんし、両方のコマンドを1つの行に書き込む素人の試みは何も役に立たないことにつながります。 これを実行する可能性のある方法はありますか、コンソールは同時イベ​​ントをサポートしていませんか?コンソールでの同時イベント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)の2つの方法があるとします。次に、サウンドを複数回作るには、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

なぜあなたは同じ時間に演奏されるのでしょうか?私はそれができないuをasureすることができます。 –

+0

@ JerrySwitalskiこれは私のマシン上でどのように動作するのですか?新しいタスクの作成後にスレッドの実行が開始されます。 BeepメソッドにConsole.WriteLineを追加すると、コンソールに混合出力が表示されます。なぜそれが同時に動かないのか詳しく教えてください。 – cassandrad

+0

私は、遅く応答して申し訳ありません - それはテストされている場合、私は間違っていたと思うので、表示されます。乾杯 –

関連する問題