se puede ejecutar en un hilo separado.
new Thread(() => Console.Beep()).Start();
Me levanté esta mañana para encontrar ráfagas de comentarios sobre esta respuesta. Así que pensé que me gustaría hablar con otras ideas.
Lo anterior también se puede lograr ejecutando el subproceso en el grupo de subprocesos, mediante el siguiente.
Action beep = Console.Beep;
beep.BeginInvoke((a) => { beep.EndInvoke(a); }, null);
Lo importante en el código anterior es llamar EndInvoke en su delegado si utiliza BeginInvoke de lo contrario va a experimentar pérdidas de memoria.
De MSDN: Importante: llame siempre a EndInvoke para completar su llamada asincrónica. http://msdn.microsoft.com/en-us/library/2e08f6yc(VS.80).aspx
Como alternativa, puede utilizar el hilo dedicado Bip tener pitidos se ejecutan en segundo plano cuando la demanda sin crear un nuevo cada hilo o utilizando el grupo de subprocesos (ver el comentario de Simon Chadwick). Como un simple ejemplo, podrías tener lo siguiente. Tenga en cuenta que paso 1 como maxStackSize, esto garantizará que se haya comprometido el mínimo (no 1, mínimo) espacio de pila para este hilo, consulte MSDN para obtener más detalles al respecto.
class BackgroundBeep
{
static Thread _beepThread;
static AutoResetEvent _signalBeep;
static BackgroundBeep()
{
_signalBeep = new AutoResetEvent(false);
_beepThread = new Thread(() =>
{
for (; ;)
{
_signalBeep.WaitOne();
Console.Beep();
}
}, 1);
_beepThread.IsBackground = true;
_beepThread.Start();
}
public static void Beep()
{
_signalBeep.Set();
}
}
Con esto, todo lo que necesita hacer para ejecutar un pitido apaisada en cualquier momento con descarta crear nuevos temas es hacer la siguiente llamada
BackgroundBeep.Beep();
+1 para un trazador de líneas – Earlz
¡Guau, 2 MB de memoria y algunos otros recursos del sistema asignados para un pitido! –
¡No convierta un hilo nuevo para ejecutar un método efímero! Esta es la mayor cantidad de patrones anti en el enhebrado que podría obtenerse. –