【问题标题】:Get label in a static method inside class c#在类c#中的静态方法中获取标签
【发布时间】:2016-08-17 22:51:35
【问题描述】:

我知道有很多类似的问题,但对于这种情况,我在很多方面都受到限制。我正在使用 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但没有成功。您能否提出其他替代方案?

【问题讨论】:

  • WinForms/WPF/UWP/etc?
  • 不懂你的意思?
  • 您在制作什么样的应用程序?我猜 myLabel 是一个 UI 控件。 myLabel 在哪里定义,因为我在您的 docUpload 类中看不到它...
  • 标签在 aspx 页面上定义。它是一个网络应用程序。简单的网页。
  • 代码在语法上是错误的。应该是myLabel.Text = e.PercentageProgress.ToString();

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


【解决方案1】:

试试这样的:

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

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

希望这会有所帮助...!

【讨论】:

  • 不能像这样ProgressInformer.UploadDownloadProgress调用docUpload里面的方法
  • 尝试使用 lambda 表达式来执行此操作 (e, s) => { ProgressInformer.UploadDownloadProgress(e, s) }。我对这个富有想象力的解决方案感到抱歉,因为我无法在我的本地 VS 中复制确切的代码来给你明确的方法。
  • 即使我在那里工作,UploadDownloadProgress 会自动从 SharpBox 触发几次,并且不会为 aspx 页面上的标签更新进度。
猜你喜欢
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多