0

MVC で FFmpeg を使用してファイル コンバーターを作成しましたが、特定の変換プロセスをキャンセルしようとしています。Encoder クラスでプロセスの ID を取得し、FileController でそれを取得しようとします。ただし、これでは 0 しか返されません。何が問題で、コントローラーで ID を取得するにはどうすればよいですか?

更新: FileController の convert メソッドは、ビューの 2 つのボタンによって呼び出されます。1 つは変換用 (非表示で自動的に開始) で、もう 1 つはキャンセル用です。エンコーダー オブジェクトを Global.asax のセッションに保存してから、変換とキャンセルのためにそれらを再度取得しようとしました。これは機能しますが、セッションを追加したときに、ボタンをクリックしてプロセスをキャンセルしようとすると、convert メソッドがすべて完了するまで何も起こりません。その後、(キューにあったかのように) 再び開始し、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();
    }
4

1 に答える 1

0

これは httppost メソッドであり、ページの読み込み前に値が変更された public 変数を取得できません。入れてViewからメソッドModelに送るか、入れてみるか、もしそうなら並行状況に注意してください。ConvertSessionTempData

于 2013-05-20T11:59:08.057 に答える