我在 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();
}