最佳答案
是的,这是可能的。
您必须将代码拆分为两个按钮,比如 start
和 stop
。
Console.ReadKey()
之前的代码进入 start
按钮的 Click 事件,Console.ReadKey()
之后的所有代码进入停止
按钮的点击事件。
在控制台变体中,所有变量都是方法的局部变量。在将不再起作用的 WinForms 变体中,我们将局部变量提升到窗体的类级别。
using 语句基本上是一个 try/catch/finally block ,在 finally block 中调用 Dispose。关闭和处置现在成为我们自己的责任,因此在 stop
中调用 Writer 和 Capture 的 Dispose
方法,之后类变量被分配一个空值。
你最终得到这样的结果:
public class Form1:Form
{
// other stuff
private WasapiCapture capture = null;
private WaveWriter w = null;
private void start_Click(object sender, EventArgs e)
{
capture = new WasapiLoopbackCapture();
capture.Initialize();
//create a wavewriter to write the data to
w = new WaveWriter("dump.wav", capture.WaveFormat));
//setup an eventhandler to receive the recorded data
capture.DataAvailable += (s, capData) =>
{
//save the recorded audio
w.Write(capData.Data, capData.Offset, capData.ByteCount);
};
//start recording
capture.Start();
}
private void stop_Click(object sender, EventArgs e)
{
if (w != null && capture !=null)
{
//stop recording
capture.Stop();
w.Dispose();
w = null;
capture.Dispose();
capture = null;
}
}
}
以上代码改编自this answer按用户thefiloe
关于c# - Windows 窗体应用程序中使用的 CSCore 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22877709/