ASP.NET表单应用程序不能连续呈现

时间:2016-02-04 16:19:03

标签: c# asp.net multithreading wcf

我正在C#中编写一个简单的winforms应用程序,它连接到每1秒更新一次的ashx文件。我的应用程序需要调用此文件,收集数据并将其显示在我的aspx页面上。

要求是我有一个按钮来启动该过程。按下按钮时,会显示一个数据实例。问题是当我尝试多次这样做时。

  protected void eThorButton_Click(object sender, EventArgs e)
    {
        //for (int i = 0; i < 5; i++)
        //{
            RenderData(eThorButton.Text);
            Thread.Sleep(1000);
        //}

    }

    private void RenderData(string buttonText)
    {
       EquationData deserializedData = getData("http://test.com/test.ashx");

            var processed = new ProcessEquation();
            int result = processed.Calculate(deserializedData);

            string res = deserializedData.parm1 + "  " + deserializedData.op + "  " + deserializedData.parm2 +
                " = " + result;
            TextBoxResult.Text = res;

            equation.Append("  " + deserializedData.parm1 + "  " + deserializedData.op + "  " + deserializedData.parm2 +
                " = " + result + '\n');
            TextAreaResults.Value = equation.ToString();
    }

我想要的是每个记录在循环数据时呈现,在继续之前暂停一秒。实际发生的是循环首先完成,然后同时渲染所有五个记录。

如何修改我的代码以显示每条记录,相隔一秒?

谢谢

我创建了一个启用了ajax的WCF服务:

namespace CandidateTest.Service

{     [ServiceContract(Namespace =“CandidateTest.Service”)]     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]     公共课eThorService     {         公共字符串按钮;         [WebGet()]         [OperationContract的]         public void getUpdate()         {             _Default def = new _Default();

        def.RenderData(button);
    }
}

}

和一个调用'getUpdate'的脚本

$(function () {

while ($('#eThorButton').text != "Stop") {

    $.ajax({

        url: 'Service/eThorService.svc/getUpdate',
        method: 'GET',
        dataType: 'json',
        success: function(){
            alert("success");
        },
        error: function (err) {
            alert(err);
        }

    })
    delay(1000);
}

});

这是基于在线研究。这是我第一次尝试这样做,所以我真的不知道自己在做什么。当我输入URL时,该服务从浏览器运行,但似乎没有从我的脚本中调用它。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您忘记了页面生命周期的工作原理。在将任何HTML发送回要呈现的浏览器之前,您的eThorButton_Click事件处理程序结束。

如果您希望实时查看页面上的数据更改,则需要在客户端上使用javascript向服务器发出请求以获取该秒的更新。我会创建一个新的Web服务,调用您的RenderData函数并返回equation.ToString()结果。然后让javascript调用这个webservice。获得结果后,将其附加到<div/>以显示结果。