簡體   English   中英

設置超時后如何中止C#控制台應用程序

[英]How to abort a C# console app after a set timeout

我們有一個由第三方組織開發的應用程序,在某些情況下它將掛起而不會退出。

這是應用程序的摘要:它實際上可以接收視頻,swf,圖像...任何媒體,並且將在特定幀或指定的持續時間后捕獲縮略圖,並將縮略圖輸出到指定的目錄。

我正在尋找一種在功能上設置超時的方法,該功能可捕獲Flash視頻的屏幕快照,這些視頻將正確處理表單,Flash控制並在超時后退出應用程序。 我可以在應用程序中放置一個計時器或秒表,並定期檢查是否已超過指定的時間,但這似乎不是非常有效的解決方案。 一定有更好的方法。

繼承函數(它不是很漂亮):

    static void ThumbnailForSwf( String inputFile, String outputFile, Int32 w, Int32 h, float? time, float? quality ) {
        AxShockwaveFlashObjects.AxShockwaveFlash flash = new AxShockwaveFlashObjects.AxShockwaveFlash();
        flash.Location = new System.Drawing.Point( 0, 0 );
        flash.ClientSize = new Size( w, h );
        flash.Enabled = true;
        flash.FSCommand += ( object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e ) => {
            switch( e.command ) {
                case "trace":
                    Console.WriteLine( e.args );
                    break;
                case "error":
                    Console.WriteLine( e.args );
                    ( (Form)( (Control)sender ).Parent ).Close();
                    break;
                case "data":
                    byte[] data = Convert.FromBase64String( e.args );
                    using( FileStream fs = File.Open( outputFile, FileMode.Create, FileAccess.Write ) ) {
                        fs.Write( data, 0, data.Length );
                    }
                    break;
                case "done":
                    ( (Form)( (Control)sender ).Parent ).Close();
                    break;
            }
        };

        Form form = new Form();
        form.FormBorderStyle = FormBorderStyle.None;
        form.ShowInTaskbar = false;
        form.Load += ( object sender, EventArgs e ) => {
            ( (Form)sender ).Visible = false;
            ( (Form)sender ).ClientSize = new Size( 0, 0 );
            try {
                flash.AllowNetworking = "all";
                flash.AllowScriptAccess = "always";
                flash.WMode = "window";
                flash.FlashVars = String.Format( "width={0}&height={1}&time={2}&quality={3}&input={4}", w, h, time ?? 0, quality ?? 80, inputFile );
                flash.Movie = Path.Combine( AssemblyDirectory, "FlashThumbnail.swf" );
            } catch( Exception ex ) {
                Console.WriteLine( ex.Message );
                ( (Form)sender ).Close();
            }
        };

        form.Controls.Add( flash );
        flash.CreateControl();
        Application.Run( form );
    }

您將需要以任務的形式啟動此功能,然后可以使用Stopwath之類的工具監視任務的持續時間,如果“經過的時間”達到一定數量,則終止該任務

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM