è possibile eseguirlo in un thread separato.
new Thread(() => Console.Beep()).Start();
Mi sono svegliato questa mattina per trovare confusione di commenti su questa risposta. Quindi ho pensato di inserire altre idee.
È possibile ottenere quanto sopra anche eseguendo il thread sul Pool di thread, utilizzando quanto segue.
Action beep = Console.Beep;
beep.BeginInvoke((a) => { beep.EndInvoke(a); }, null);
La cosa importante nel codice sopra è di chiamare EndInvoke sul vostro delegato, se si utilizza BeginInvoke altrimenti si sperimenterà perdite di memoria.
Da MSDN: Importante: chiamare sempre EndInvoke per completare la chiamata asincrona. http://msdn.microsoft.com/en-us/library/2e08f6yc(VS.80).aspx
In alternativa, è possibile utilizzare il filo Beep dedicato ad avere segnali acustici eseguiti in background quando su richiesta senza creare una nuova ogni filo o utilizzando il pool di thread (si veda il commento di Simon Chadwick). Come un semplice esempio, potresti avere il seguente. Notare che io passo 1 come maxStackSize, questo garantirà che lo spazio minimo (non 1, minimo) dello stack sia impegnato per questo thread, vedere MSDN per maggiori dettagli su questo.
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 questo, tutto quello che dovete fare per eseguire un segnale acustico backround in qualsiasi momento con fuori la creazione di nuove discussioni è effettuare la seguente chiamata
BackgroundBeep.Beep();
fonte
2010-05-01 22:11:02
+1 per un liner – Earlz
Wow, 2 MB di memoria e altre risorse di sistema allocate per un segnale acustico! –
Si prega di non girare una nuova discussione per eseguire un metodo di breve durata! Questo è il maggior numero di pattern anti nel threading che potrebbero ottenere. –