【问题标题】:C# documentation about how to add an event handler [duplicate]关于如何添加事件处理程序的 C# 文档 [重复]
【发布时间】:2018-05-28 21:58:35
【问题描述】:

我正在使用 NRECO 和 ffmpeg 对视频转换器进行编码,一切正常,但在获取进度时间时 我试过了

pgbConversion.Value = FFMpegConverter.ConvertProgress();

但这是不可能的,所以我得到了! ** **ConvertProgress 是偶数;请查看有关如何添加偶数处理程序的 C# 文档。****

来自 NReco 请问我怎样才能知道 ConvertProgrss 是一个事件的视频进度

【问题讨论】:

  • 你确定这不是“事件”的意思,甚至不是吗?在这种情况下,我会看到我需要将表达式分配给什么属性,可能使用 lambda。我不熟悉这个框架,但如果你想为按钮点击事件添加一个函数,就像 button.onClick += (s,e) => DoSomething();
  • 什么是 pgbConversion?那是进度条吗?

标签: c# visual-studio ffmpeg nreco


【解决方案1】:

你写这个:

FFMpegConverter.ConvertProgress +=

您的 Visual Studio 开始帮助您,为您提供将事件处理程序代码附加到 ConvertProgress 事件。它会显示一个弹出窗口,就像 MY Visual Studio 在这里所做的那样,在我将事件处理程序附加到 Timer.Elapsed 事件的屏幕截图中,这是一个完全不同的事件,在不同的对象上,我用它作为示例来演示 Visual Studio 如何帮助您将事件附加到事物:

然后YOUR视觉工作室中按TAB键接受弹出窗口中的建议

Visual Studio 将为您构建一个基本的事件处理程序,您可以将您希望在每次引发事件时运行的代码添加到其中。这是 my Visual Studio 在我使用 Timer 向我的示例添加事件处理程序期间按 Tab 时所做的:

(当然,我的图片显示 VS 为 Timer.Elapsed 制作处理程序,而不是 FFMpegConverter.ConvertProgress,因为我有 Timer,但我没有那个 FFMpegConverter 类。“图片仅用于说明目的 - 你不应该输入你在我的图片中看到的代码”)

【讨论】:

  • 您好,感谢您的回答,但我在此行出现错误
  • FFMpegConverter.ConvertProgress += new System.Timers.Timer().Elapsed += Program_Elapsed;
  • 你看我帖子的最后一行了吗?
  • 非静态字段、方法或属性 'FFMpegConverter.ConvertProgress' 需要对象引用 无法将类型 'void' 隐式转换为 ....
  • 对不起,我还没有读过,我会试试看,谢谢
【解决方案2】:

您确定这不是拼写错误,它们的意思是“事件”吗?在这种情况下,我会将 lambda 表达式分配给事件,或者您可以只引用另一种方法,如下所示,因此文档将在此处:Lambda ExpressionsEvents

不带 Lambda 的示例:

static void Main(string[] args)
{
    var ffMpeg = new FFMpegConverter();
    ffMpeg.ConvertProgress += FfMpeg_ConvertProgress;
    ffMpeg.ConvertMedia("input.mov", "output.mp4", Format.mp4);
}

private static void FfMpeg_ConvertProgress(object sender, ConvertProgressEventArgs e)
{
    // Percent complete as a double
    pgbConversion.Value = e.Processed.TotalSeconds / e.TotalDuration.TotalSeconds;
}

带有 Lambda 表达式的示例:

static void Main(string[] args)
{
    var ffMpeg = new FFMpegConverter();
    ffMpeg.ConvertProgress += (s, e) => {
        pgbConversion.Value = e.Processed.TotalSeconds / e.TotalDuration.TotalSeconds;
    };
    ffMpeg.ConvertMedia("input.mov", "output.mp4", Format.mp4);
}

事件只有视频中的总秒数和已处理的秒数。它们也表示为 TimeSpan 对象。我建议获取每一个的总秒数(返回双精度),然后除以完成百分比。当然,您可以将它们中的任何一个单独用作TimeSpan 实例。

【讨论】:

  • 谢谢,这里有个错误:pgbConversion.Value = 它表明它是非静态的
  • 您可以添加代码吗? pgbConversion 实例化的类是 .NET 库的标准部分吗?
  • 您为什么不再使用 lambda 版本?我认为那很整洁..
  • 与问题没有直接关系。我想优先考虑具体被问到的问题,而不是答案的技术水平。但是,既然你问了,我可以添加它:)
猜你喜欢
  • 1970-01-01
  • 2017-11-26
  • 2010-12-04
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
相关资源
最近更新 更多