如何在非静态函数中为静态变量赋值?

时间:2011-08-19 01:31:12

标签: c# jquery asp.net

基本上,aspx中的ajax每隔1000毫秒从。WebMethod(。static GetData()中的public static int Percent { get; set; }轮询.cs的值。属性声明为静态Percent。我想要做的是点击btn1时,它会将值分配到ajaxWebMethod static GetData()public static int PERCENT { get; set; } [WebMethod] public static string GetData() { return PERCENT ; } protected void btn1_Click(object sender, EventArgs e) { DownloadLibrary downloader = new DownloadLibrary(); downloader.DoWorkSynchronous(); bool isLibraryBusy = true; while (isLibraryBusy) { PERCENT = library.returnValue(); isLibraryBusy = downloader.IsBusy(); } } 获取值。

Downloader.aspx.cs

    $(document).ready(function() {
        $("#progressbar").progressbar();
              setTimeout(updateProgress, 100);
    });

   function updateProgress() {
              $.ajax({
                  type: "POST",
                  url: "Downloader.aspx/GetData",
                  data: "{}",
                  contentType: "application/json; charset=utf-8",
                  dataType: "json",
                  async: true,
                  success: function(msg) {
                      // Replace the div's content with the page method's return.

                      $("#progressbar").progressbar("option", "value", msg.d);
                  }
              });
          }

Downloader.aspx(ajax polling)

Percent

我想将值分配给Percent,但遗憾的是,由于staticPercent,我无法执行此操作。如果我没有将static声明为GetData,则Percent()函数无法验证ajax是什么。对于GetData()轮询,static必须位于static。如何为non-static function中的{{1}}变量指定值?

2 个答案:

答案 0 :(得分:3)

要引用static成员,您必须在成员前面加上定义它的类的名称。

然而,不要这样做!

您的静态变量对于您的Web服务的每个用户都是通用的。您可能认为每个会话只有一个副本,但事实并非如此。同一个Web服务的所有用户都将有一个副本。

答案 1 :(得分:2)

使用类名称对静态方法的调用作为前缀。

Downloader.PERCENT = library.returnValue();

然而正如John指出的那样,除非你能保证你的应用程序只有一个并发用户,否则你不应该使用静态成员来完成这项任务。

更好的方法可能是将PERCENT数据存储在会话变量中。这样它只是每个会话的范围,而不是整个应用程序。

Session["Percent"] = library.returnValue();

然后改变你的网络方法:

[WebMethod]
public static string GetData()
{
     return (string)Session["Percent"];
}