0

我知道有很多类似的问题,但是对于这种情况,我在很多方面都受到限制。我正在使用 SharpBox 将文件上传到 Dropbox,并且为了创建对用户可见的进度条,我正在使用 SharpBox 返回百分比的静态方法。一切都很好,但我需要以某种方式将此信息返回到 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;
}

限制:如果这对您仍然有效,则此解决方案不是线程安全的。这意味着,您无法回显多个下载的进度。您一次只能下载一次。

希望这可以帮助...!

于 2016-04-24T17:23:02.777 回答