我正在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时,该服务从浏览器运行,但似乎没有从我的脚本中调用它。我做错了什么?
答案 0 :(得分:1)
您忘记了页面生命周期的工作原理。在将任何HTML发送回要呈现的浏览器之前,您的eThorButton_Click
事件处理程序结束。
如果您希望实时查看页面上的数据更改,则需要在客户端上使用javascript向服务器发出请求以获取该秒的更新。我会创建一个新的Web服务,调用您的RenderData
函数并返回equation.ToString()
结果。然后让javascript调用这个webservice。获得结果后,将其附加到<div/>
以显示结果。