【问题标题】:C# .net Update Page After x Minutesx 分钟后 C# .net 更新页面
【发布时间】:2020-01-17 04:08:43
【问题描述】:

我正在尝试在呈现页面后使用新值更新 HTML 表。新值显示在 HTML 表格的“10 分钟”列中。

这些值与“现在”列中显示的值相同,但在“10 分钟”列中显示时它们应该保持不变。

以下代码用于确定需要多少分钟才​​能呈现“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>

【问题讨论】:

    标签: c# html asynchronous timer updatepanel


    【解决方案1】:

    让:

    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”函数。

    【讨论】:

    • 请为您的答案添加一些解释。使用how to answer指南
    • 你能再解释一下吗?我才刚刚开始编程。
    • 已更新以包含示例使用。
    • 点击刷新时如何保持返回值不变?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多