我在MVC中使用FFmpeg创建了一个文件转换器,现在我正在尝试取消特定的转换过程。我在我的Encoder类中获取进程的ID并尝试在FileController中检索它。但是,这只会给出0.什么是错的,如何在控制器中检索ID?
更新: FileController中的convert方法由视图中的两个按钮调用,一个用于转换(隐藏并自动启动),另一个用于取消。我尝试将编码器对象保存在Global.asax中的会话中,然后再次检索它们以进行转换和取消。这是有效的,但是当我添加会话时,当我尝试通过单击按钮取消该过程时,在转换方法全部完成之前没有任何反应。然后它再次启动(好像它已经在队列中)并转到cancel方法。在此会话之前,取消按钮将中断该方法。
如何让取消按钮中断转换方法?
//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();
}
答案 0 :(得分:0)
这是一个httppost方法,它无法获取在页面加载之前更改了值的公共变量。
您应该将其放入Model
并将其从View中发送到Convert
方法。或者尝试将其放入Session
或TempData
,如果是这样,请注意并发情况