如何在设置超时后中止C#控制台应用程序

时间:2015-06-03 19:31:06

标签: c# flash image-processing console-application

我们有一个由第三方组织开发的应用程序,在某些情况下它会挂起而不会优雅地退出。

以下是该应用程序的摘要:它接收视频,swf,图像......实际上是任何媒体,并将在特定帧或指定的持续时间后捕获缩略图,并将缩略图输出到指定的目录。

我正在寻找一种方法来设置功能的超时,该功能捕获闪存视频的屏幕截图,如果超时超出,将正确处理表单,闪存控制并退出应用程序。我可以在应用程序中放置一个计时器或秒表,并定期检查指定的时间是否超过,但这似乎不是一个非常合理的解决方案。一定有更好的方法。

继承人的功能(它不是很漂亮):

    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 );
    }

1 个答案:

答案 0 :(得分:1)

您需要将此功能作为任务启动,然后您可以使用Stopwath监视任务持续时间,如果Elapsed达到某个数字,则只需终止该任务