0

我在 MVC 中使用 FFmpeg 制作了一个文件转换器,现在正在尝试取消特定的转换过程。我在我的 Encoder 类中获得了进程的 ID,并尝试在 FileController 中检索它。但是,这仅给出 0。出了什么问题,如何在控制器中检索 ID?

更新: FileController 中的 convert 方法由视图中的两个按钮调用,一个用于转换(隐藏并自动启动),一个用于取消。我尝试将编码器对象保存在 Global.asax 的会话中,然后再次检索它们以进行转换和取消。这可行,但是当我添加会话时,当我尝试通过单击按钮取消该过程时,在转换方法全部完成之前没有任何反应。然后它再次开始(就像它已经在队列中一样)并转到取消方法。在会话之前,取消按钮会中断该方法。

我该怎么做才能使取消按钮中断转换方法?

    //Encoder class
    private string RunProcess(string Parameters, string fileType) {
    //...
    ProcessStartInfo oInfo = new ProcessStartInfo(this.FFmpegPath, Parameters);
    Process proc = System.Diagnostics.Process.Start(oInfo);
    _ID = proc.Id;
    //... }

    private int _ID;
    public int Id {
        get { return _ID; }
        set { _ID = value; }
    }

.

    //FileController

    [HttpPost]
    public ActionResult Convert(String id, string convert, string kill, string test) {
    //...
    Encoder obj = Session["Encoder"] as Encoder;
    if (convert != null) {
    EncodedVideo encoded = obj.EncodeVideo(inputv, 
    QuickVideoEncodingCommands.Mpeg, outputVPath, true, ext); //Starts encoding
    //...
    } else {
    return KillProcess();
    }}

    public ActionResult KillProcess() {
    Encoder obj = Session["Encoder"] as Encoder;
    int id = obj.Id;
    Process p = Process.GetProcessById(id);
    p.Kill();
    //... }

.

    //Global.asax
    protected void Session_Start() {
        HttpContext.Current.Session["Encoder"] = new Encoder();
    }
4

1 回答 1

0

这是一个httppost方法,它无法获取在页面加载之前改变值的公共变量。您应该将其放入Model并从 View 中将其发送给ConvertMethod。或者尝试将其放入,Session或者TempData,如果是,请注意并发情况。

于 2013-05-20T11:59:08.057 回答