有关如何添加事件处理程序的C#文档

时间:2017-12-14 18:10:35

标签: c# visual-studio ffmpeg nreco

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

pgbConversion.Value = FFMpegConverter.ConvertProgress();

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

来自NReco的

请知道ConvertProgrss是一个事件,我怎样才能获得视频进展

2 个答案:

答案 0 :(得分:2)

你写这个:

FFMpegConverter.ConvertProgress +=

您的 Visual Studio通过提供将事件处理程序代码附加到ConvertProgress事件来开始帮助您。它会显示一个弹出窗口,比如我的视觉工作室在这里做的,在这个截图中我将一个事件处理程序附加到一个Timer.Elapsed事件,这是一个完全不同的事件,在另一个对象上,我以此为例演示visual studio如何帮助您将事件附加到事物上:

enter image description here

然后您的 visual studio中按TAB接受弹出窗口中的建议

Visual Studio将为您构建一个基本事件处理程序,您可以将代码添加到每次引发事件时要运行的代码中。以下是我在使用Timer向我的示例添加事件处理程序时按Tab键时我的 visual studio所做的事情:

enter image description here

(当然我的照片显示VS为Timer.Elapsed制作处理程序,而不是FFMpegConverter.ConvertProgress,因为我有Timer,但我没有FFMpegConverter类......" Pics是为仅用于插图 - 您不应该输入您在我的照片中看到的代码")

答案 1 :(得分:1)

你确定这不是一个错字,他们的意思是"事件"?在这种情况下,我会将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;
}

示例w / 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个实例。