控制台c#中的同步事件

时间:2016-05-08 12:15:46

标签: c#

我已经让控制台以不同的频率发出4次哔声,然后从5到1倒计时。但现在我想让这两个事件同时发生 - 嘟嘟声,同时显示一个数字。我无法在谷歌上找到答案,外行人试图在一行上写下这两个命令也没什么用。 那么,有没有可能的方法,或者控制台不支持同时发生的事件?

2 个答案:

答案 0 :(得分:0)

呃,你需要使用System.Threading

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

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

答案 1 :(得分: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();
        }
    }
}

其中() => {}是写一个lambda表达式的符号 - 没有方法定义的小段代码。