在类c#中的静态方法中获取标签

时间:2016-04-24 15:54:06

标签: c# asp.net file-upload dropbox sharpbox

我知道有很多类似的问题,但在很多情况下我对这种情况有所限制。我使用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但没有成功。你能建议其他选择吗?

1 个答案:

答案 0 :(得分: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;
}
  

限制:如果这对您有用,那么此解决方案仍不是线程安全的。这意味着,您无法回显多次下载的进度。您一次只需要下载一次。

希望这有助于......!