【发布时间】:2014-07-25 18:03:02
【问题描述】:
我希望程序在按下特定键时播放哔声。 有什么方法可以在释放键时检测到它吗?然后中止播放该哔声的线程?
考虑以下示例:
class Program
{
public static void Play()
{
while (true)
{
Console.Beep(400, 10000);//play for a long length, will be interrupted as soon as the key is released
}
}
public static void Main(string[] args)
{
while(true)
{
ConsoleKeyInfo cki=Console.ReadKey(true);
if(cki.Key==ConsoleKey.G)
{
Thread p = new Thread(Play);
p.Start();
}
}
}
我考虑过使用Thread.Abort(),但是它应该只在释放键 G 时中止上述线程 p。
实现一种在按住 G 键的同时短时间播放哔声的方法是行不通的,因为每次哔声之间可以听到很小的间隔。
因此,使用以下代码将播放短促的哔哔声,它们之间的间隔很小:
public static void Main()
{
ConsoleKeyInfo keyinfo;
do
{
keyinfo = Console.ReadKey();
Console.Beep(400, 10);
}
while (keyinfo.Key == ConsoleKey.G);
}
相反,我希望发出一声长哔声,一松开键就停止。
【问题讨论】:
-
检查这个答案,以及挂钩链接stackoverflow.com/a/8898251/752527
-
尝试使用 KeyUp 事件处理程序
-
这将需要我使用 Windows 窗体应用程序...没有它我有什么办法吗?
-
这样做将使用多个console.beep 命令,这些命令将被听到许多音符,它们之间的间隔非常短。相反,我希望听到一声长长的 Console.beep,它会听到一声长长的连续哔声,只有在松开按键时才会停止
标签: c# multithreading console-application beep