Sie es in einem separaten Thread ausgeführt werden kann.
Ich wachte heute morgen auf, um eine Menge Kommentare zu dieser Antwort zu finden. Also dachte ich, ich würde mit ein paar anderen Ideen mitspielen.
Die oben genannten können auch durch Ausführen des Threads im Thread-Pool erreicht werden, indem Sie Folgendes verwenden.
Action beep = Console.Beep;
beep.BeginInvoke((a) => { beep.EndInvoke(a); }, null);
Das Wichtigste in dem obigen Code ist EndInvoke auf Ihrem Delegat anrufen, wenn Sie BeginInvoke sonst verwenden Sie Speicherlecks auftreten.
Von MSDN: Wichtig: Rufen Sie immer EndInvoke auf, um den asynchronen Anruf abzuschließen. http://msdn.microsoft.com/en-us/library/2e08f6yc(VS.80).aspx
Alternativ können Sie das dedizierte Beep Thread verwenden Pieptöne im Hintergrund laufen zu lassen, wenn sie auf Nachfrage, ohne einen neuen Thread jedes Mal zu schaffen oder den Thread-Pool mit (Simon Chadwick Kommentar sehen). Als einfaches Beispiel könnten Sie Folgendes haben. Beachten Sie, dass ich 1 als maxStackSize übergebe. Dadurch wird sichergestellt, dass der Mindestspeicherplatz (nicht 1) für diesen Thread festgeschrieben wird. Weitere Informationen hierzu finden Sie in MSDN.
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();
}
}
Damit alles, was Sie tun müssen, um einen Hintergrund Piepton jederzeit mit heraus zu schaffen, neue Themen laufen ist die folgende Anruf
BackgroundBeep.Beep();
+1 für eine Einlage – Earlz
Wow, 2MB + Speicher und einige andere Systemressourcen für einen Piepton! –
Bitte drehen Sie keinen neuen Thread, um eine kurzlebige Methode auszuführen! Dies ist so viel von Anti-Muster im Threading wie es könnte. –