0

同様の質問がたくさんあることは知っていますが、この場合、多くの点で制限されています。SharpBox を使用して Dropbox にファイルをアップロードしています。ユーザーに表示されるプログレス バーを作成するために、SharpBox が percenatge を返す静的メソッドを使用しています。すべて問題ありませんが、この情報を aspx ページまたは javascript に何らかの形で返す必要があります。

メソッドにパラメータを追加できません。メソッドから静的を削除することはできますが、ラベルに非常に奇妙な例外 null が引き続き表示されます (おそらくメソッドが SharpBox から動的に起動するため)。

したがって、メソッド UploadDownloadProgress は、私が問題を抱えている部分です。

 public class docUpload
 {

    static public void Doc_Upload()
    {
        dropBoxStorage.UploadFile(stream, filename, entry, UploadDownloadProgress);
    } 

    static void UploadDownloadProgress(Object sender, FileDataTransferEventArgs e)
    {

        // I need the e.PercentageProgress on aspx page
        System.Diagnostics.Debug.WriteLine(e.PercentageProgress);

        // This wont work since it is a static method
        myLabel.Text = e.PercentageProgress.ToString();

        e.Cancel = false;
    }
}

ラベルに e.PercentageProgress が必要です。また、代わりにjavascriptを呼び出そうとしましたが、成功しませんでした。他の代替案を提案できますか?

4

1 に答える 1

0

次のようなことを試してください:

public class docUpload
{
    static public void Doc_Upload()
    {
        dropBoxStorage.UploadFile(stream, filename, entry, ProgressInformer.UploadDownloadProgress);
    } 
}

public class ProgressInformer {

    public static string Progress = "0";

    static void UploadDownloadProgress(Object sender, FileDataTransferEventArgs e)
    {

        // print a dot           
        System.Diagnostics.Debug.WriteLine(e.PercentageProgress);

        // Need to show this on a label or return to front end somehow
        ProgressInformer.Progress = e.PercentageProgress.ToString();

        e.Cancel = false;
    }
}

静的変数に値を設定しているため、別の場所からアクセスできます。次に、その値を使用して、何らかのメソッドまたはサービスを使用してフロントエンドでエコーできます。おそらく次のようになります。

public string EchoToFrontEnd()
{
    return ProgressInformer.Progress;
}

制限:これで問題が解決しない場合でも、このソリューションはスレッド セーフではありません。つまり、複数のダウンロードの進行状況をエコーすることはできません。一度に 1 つのダウンロードで作業する必要があります。

お役に立てれば...!

于 2016-04-24T17:23:02.777 に答える