2016-04-24 12 views
0

Ich weiß, es gibt viele ähnliche Fragen, aber ich bin in vielerlei Hinsicht für diesen Fall eingeschränkt. Ich benutze SharpBox, um Dateien zu Dropbox hochzuladen und um eine Fortschrittsbalken zu erstellen, der für den Benutzer sichtbar ist, verwende ich eine statische Methode, bei der SharpBox die Percenatge zurückgibt. Es ist alles in Ordnung, aber ich muss diese Informationen irgendwie auf die Aspx-Seite oder Javascript zurückgeben.Get Label in einer statischen Methode innerhalb der Klasse C#

Ich kann der Methode keinen Parameter hinzufügen. Ich könnte die Statik von der Methode entfernen, aber es gibt immer noch eine Ausnahme auf dem Label Null, die ziemlich seltsam ist (wahrscheinlich, weil die Methode von SharpBox dynamisch ausgelöst wird).

Also die Methode UploadDownloadProgress ist der Teil, bei dem ich Probleme habe.

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

Ich brauche die e.PercentageProgress in dem Etikett. Alternativ habe ich auch versucht, Javascript ohne Erfolg aufzurufen. Können Sie andere Alternativen vorschlagen?

+0

WinForms/WPF/UWP/etc? –

+0

Verstehst du nicht, was du meinst? –

+0

Welche Art von Anwendung machst du? Ich schätze, myLabel ist eine UI-Kontrolle. Wo ist myLabel definiert, weil ich es nicht in Ihrer docUpload-Klasse sehe ... –

Antwort

0

versuchen, etwas wie folgt aus:

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

Nun, da Sie die statische Variable mit Wert setzen Sie es von woanders zugreifen können. Dann können Sie diesen Wert verwenden, um auf dem Front-End mit einer Methode oder einem Dienst zu echoen. Möglicherweise so:

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

Einschränkung: Wenn dies für Sie arbeitet immer noch diese Lösung nicht sicher ist, fädeln. Das bedeutet, dass Sie den Fortschritt für mehrere Downloads nicht wiedergeben können. Sie müssen mit einem einzelnen Download gleichzeitig arbeiten.

Hoffe, das hilft ...!

+0

Kann die Methode innerhalb von docUpload nicht wie diese ProgressInformer.UploadDownloadProgress aufrufen –

+0

Versuchen Sie mit einem Lambda-Ausdruck, um es so zu machen (e, s) => {ProgressInformer.UploadDownloadProgress (e, s)}. Es tut mir leid wegen der imaginären Lösung, da ich den genauen Code in meinem lokalen VS nicht replizieren kann, um Ihnen einen bestimmten Weg zu geben. –

+0

Auch wenn ich es dort arbeite, wird das UploadDownloadProgress von der SharpBox automatisch einige Male ausgelöst und Fortschritt wird nicht für die Bezeichnung auf der Aspx-Seite aktualisiert. –