2016-04-24 39 views
0

我知道有很多类似的问题,但我对这种情况在很多方面都有限制。我正在使用SharpBox将文件上传到Dropbox,并且为了创建用户可见的进度条,我使用了SharpBox返回percenatge的静态方法。这一切都很好,但我需要以某种方式将此信息返回到aspx页面或JavaScript。在类c中的静态方法中获取标签#

我无法向该方法添加参数。我可以从方法中移除静态,但它仍然在标签上给出了一个非常奇怪的异常(可能是因为该方法会动态地从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没有成功。你能提出其他的选择吗?

+0

WinForms/WPF/UWP/etc? –

+0

不明白你的意思? –

+0

你在制作什么样的应用程序?我猜myLabel是一个UI控件。 myLabel在哪里定义,因为我没有在您的docUpload类中看到它... –

回答

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

限制:如果这对你的作品还是这个解决方案不是线程安全的。这意味着,您无法回应多次下载的进度。您一次只能使用一次下载。

希望这有助于...!

+0

无法调用docUpload内部的方法,像这样ProgressInformer.UploadDownloadProgress –

+0

尝试使用lambda表达式来执行此操作(e,s)=> {ProgressInformer.UploadDownloadProgress(e, s)}。我对这个想象力的解决方案感到抱歉,因为我不能在我的本地VS中复制确切的代码以给你明确的方式。 –

+0

即使我在那里工作,UploadDownloadProgress会自动从SharpBox中触发几次,并且Progress不会更新aspx页面上的标签。 –

相关问题