2016-04-24 8 views
0

多くの類似の質問があることを知っていますが、このケースでは多少の制限があります。 SharpBoxを使用してDropboxにファイルをアップロードしています。ユーザーに表示されるプログレスバーを作成するために、SharpBoxがpercenatgeを返す静的メソッドを使用しています。それはすべてですが、私はこの情報をaspxページまたはjavascriptに何とか戻す必要があります。クラスC内の静的メソッドのラベルを取得する#

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

したがって、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を呼び出すことを試みた。あなたは他の選択肢を提案できますか?

+0

WinForms/WPF/UWP/etc? –

+0

あなたは何を意味しないのですか? –

+0

どのようなアプリケーションを作成していますか?私はmyLabelがUIコントロールだと思っています。あなたのdocUploadクラスには表示されないため、myLabelはどこに定義されていますか... –

答えて

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つのダウンロードで作業する必要があります。

希望すると...!

+0

このProgressInformer.UploadDownloadProgressのようにdocUpload内のメソッドを呼び出すことはできません –

+0

ラムダ式を使って(e、s)=> {ProgressInformer.UploadDownloadProgress(e、 s)}。想像力豊かな解決策について申し訳ありませんが、私はあなたの明確な方法を与えるために私のローカルVSで正確なコードを複製することができません。 –

+0

もし私がそこで動作しても、UploadDownloadProgressはSharpBoxから自動的に数回起動され、進行状況はaspxページのラベルに対して更新されません。 –