C#如何实现同一按钮点击事件切换录制启停两种状态?
C# WinForm 单按钮切换录制开始/停止实现方案
你当前代码的核心问题是FFmpeg_Capture实例写在点击事件方法内部,属于局部变量,每次点击都会生成新实例,第二次点击时无法获取第一次启动的录制对象,自然无法调用停止方法。需要把录制实例、录制状态标记提升到窗体类层级存储,再根据状态分支执行对应逻辑:
- 第一步:在窗体类中声明类级别字段
字段要写在窗体类的内部、所有方法的外部,用来持久存储录制对象和当前状态:
// 持有录制操作实例 private FFmpeg_Capture _recordInstance; // 标记当前是否处于录制状态 private bool _isRecording = false;
- 第二步:重写按钮点击事件逻辑
点击时先判断当前录制状态,分别执行启动/停止逻辑,同步更新按钮文本和状态标记:
private void btnRecord_Click(object sender, EventArgs e) { if (!_isRecording) { // 启动录制分支 _recordInstance = new FFmpeg_Capture(); _recordInstance.Start("Testing", 60); btnRecord.Text = "Stop"; _isRecording = true; } else { // 停止录制分支 _recordInstance.Stop(); // 若FFmpeg_Capture实现了IDisposable接口,加上这行释放资源,没有可删除 _recordInstance.Dispose(); _recordInstance = null; btnRecord.Text = "Record"; _isRecording = false; } }
补充说明:如果需要在窗体关闭时自动处理未停止的录制,可以在窗体的
FormClosing事件里加判断,如果_isRecording为true就主动调用_recordInstance.Stop()释放资源,避免后台进程残留。
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

