我已经在呈现页面后尝试用新值更新HTML表。新值显示在HTML表的“ 10分钟”列中。
这些是在“现在”(Now)列中显示的相同值,但是当在“ 10分钟”(10 min)列中显示时,它们应保持固定。
以下代码确定呈现“ 10分钟”列之前需要多少分钟。
timeStart = market[0].marketStartTime;
timeNow = DateTime.Now.AddHours(-2);
timeTenMinToStart = timeStart.Subtract(timeNow).TotalMinutes - 10;
然后在“ 1分钟”列中重复此操作。
我一直在尝试使用计时器来完成此操作,但没有成功。
Market.aspx.cs
public string getTableData()
{
length = market[0].runners.Count; //determine length of table
int lengthTable = length;
int marketCounter = 0;
string htmlStr = "";
while (lengthTable > 0)
{
htmlStr += "<tr><td> <font color=\"red\">" + market[0].runners[marketCounter].runnerName + "</text></td>" + "<td>" + marketOdds[0].runners[marketCounter].lastPriceTraded.ToString() + "</td>" + "<td>" + "</td>" + "<td>" + TenMin????() + "</td></tr>";
lengthTable--;
marketCounter++;
}
return htmlStr;
}
Market.aspx
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="upUpdatePanel" runat="server" UpdateMode="Conditional" ViewStateMode="Enabled">
<ContentTemplate>
<p>
<table border="1" class="accountInfo">
<tr >
<td width="300px"> <b>ID</b> </td>
<td width="50px"> <b>Now</b> </td>
<td width="50px"> <b>10 min</b> </td>
<td width="50px"> <b>1 min</b> </td>
<td width="50px"> <b>Change</b> </td>
</tr>
<%=getTableData()%>
</table>
</p>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Refresh" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
让:
public void MY_FUNCTION_TO_DELAY ()
{
// your code here
}
...是您希望延迟的代码。
您可以在应用程序中的某个位置包含此静态方法:
public static void DelayMe(Action myVoidMethod, TimeSpan delayTime)
{
Func<bool> f = () => { myVoidMethod.Invoke(); return false; };
System.Threading.Timer t = default;
t = new System.Threading.Timer(_ =>
{
if (!f())
{
t.Dispose();
}
}, null, default(TimeSpan), delayTime);
}
...然后,触发功能延迟(在这种情况下为1分钟):
DelayMe(InitializeTradeHistory, TimeSpan.FromMinutes(1));
...注意,对于熟练的读者来说,可以将静态方法快速修改为“ repeatMe”而不是“ delayMe”函数。