httpDownload

Q6
大きなファイルのダウンロードを中断するときに時間がかかる
[内容]
大きなファイルのダウンロードを行っているときにStopメソッドで中断しても
すぐに終了しない

A6
[解決方法]
httpDownloadクラスのStopメソッドは、複数登録されているダウンロードURLの後続
エントリの処理を中止する動きを行うもので、通信を即時停止させる動作はしません。

後続のエントリを中止した場合、現在のダウンロード処理→通信の停止処理が行われます。
この通信の停止処理が完了するまでの間は、GUI操作が制限されるため、大きなサイズの
ファイルのダウンロードを中断したとき、Biz/Browser画面がフリーズしたように見えてしまい
ます。

Stop処理実行中には、明示的に停止処理中であることをメッセージ表示するといった対策を
入れることを推奨します。


[サンプルコード]

Form Form1 {
    Button Button1 {
        Title = "csvダウンロード開始";
        function OnTouch( e ){
            /*  サーバ名を指定 */
            var session = findHttpSession("http://Servername");
            var down = new httpDownload(session);
            /* オブジェクトツリーに接続しないとイベントを渡す先が不明になる */
            /* downオブジェクトが存在していたらDeleteしておく */
            var child = ^.FindChild("down");
            if( child != null){
                ^.down.Delete();
            }
            ^.append(down, "down");
            /* 5MB超のcsvファイルをダウンロードする */
            ^.down.addURL("file/a1.csv");
            ^.down.addURL("file/b1.csv");
            ^.down.addURL("file/c1.csv");
            ^.down.addURL("file/d1.csv");

            ^.down.Start();
        }
    }

    Button Button2 {
        Title = "stop";
        Function OnTouch( e ) {
            var child = ^.FindChild("down");
            /* httpDownloadオブジェクトdownが無い場合、処理を抜ける */
            if( child == null){
                return;
            }

            /* Stop()実行前にLabel更新をおこなう */
            ^.Label2.Value = "ダウンロード終了中です…";

            /* 画面更新のためのアイドルを設けるためのSetTimer */
            SetTimer(0.1);
        }

        /* httpDownloadのStop処理 */
        Function OnTimer( e ) {
            RemoveTimer();
            ^.down.Stop();
        }
    }
    Label Label2 {
    }

    /* Formに接続したhttpDownloadオブジェクトのイベントをここで捕捉する */
    Function OnAsyncDownload( e ){
        EditBox1.Value += e.response.Url + "が終了しました\r\n";
    }

    Function OnExitDownload( e ){
        if(Label2.Value != ""){
            Label2.Value = "";
            EditBox1.Value += "後続ダウンロードを中止しました\r\n";
        }else{
            EditBox1.Value += "全ダウンロードが終了しました\r\n";
        }
        /* オブジェクトツリーに接続したdownオブジェクトをDeleteする */
        down.delete();
    }
}
CRSファイル形式のサンプルを
  「httpDownload 後続エントリ中断サンプル(Dwn_008.zip)
よりご利用いただけます。

管理番号:Dwn_008
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser・Biz/Designer TIPS集 トップへ