我知道有很多类似的问题,但在很多情况下我对这种情况有所限制。我使用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但没有成功。你能建议其他选择吗?
答案 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;
}
限制:如果这对您有用,那么此解决方案仍不是线程安全的。这意味着,您无法回显多次下载的进度。您一次只需要下载一次。
希望这有助于......!