You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:09:55