用C#中的线程更新ASP.net UpdatePanel控件

本文关键字:ASP net UpdatePanel 控件 更新 线程 | 更新日期: 2023-09-27 18:00:29

我要做的事情:我试图使用网页后面代码中的线程(我使用的是ASP.NET web窗体网站项目)每隔0.5秒更新一个图像(在UpdatePanel控件中)

到目前为止我所拥有的:我在屏幕上有模拟图像。我还编写了一个线程,通过单击按钮调用它。这是代码:

protected void Button1_Click(object sender, EventArgs e)
{
    DoThing();
}
public void DoThing()
{
    Thread thread = new Thread(() => {
        while (true)
        {
            UpdatePanel1.Update();
            System.Threading.Thread.Sleep(500);
            if (Image2.ImageUrl == "~/Images/Water3.png")
            {
                Image2.ImageUrl = "~/Images/Water1.png";
                continue;
            }
            if (Image2.ImageUrl == "~/Images/Water1.png")
            {
                Image2.ImageUrl = "~/Images/Water2.png";
                continue;
            }
            if (Image2.ImageUrl == "~/Images/Water2.png")
            {
                Image2.ImageUrl = "~/Images/Water3.png";
                continue;
            }
        }
    });
    thread.Start();
    thread.Join();
}

这是我的HTML:

<%@ Page Title="Home Page" Language="C#" Async="true"     MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent">
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Image ID="Image1" runat="server" Height="32px" Width="32px" ImageUrl="~/Images/Fauset.png"/><asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click"/><br />
        <asp:Image ID="Image2" runat="server" Height="96px" Width="32px" ImageUrl="~/Images/Water1.png" OnLoad="Image2_Load"/><br />
        <asp:Image ID="Image3" runat="server" Height="32px" Width="32px" ImageUrl="~/Images/Bucket.png"/>
    </ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
</asp:Content>

问题:当我单击按钮时,页面当前什么都不做。当我在线程中设置断点时,线程正在运行。由于某些原因,页面没有更新。

注意:我尽量远离JS、Jquery和JSON,因为我知道它们,但如果我需要使用它们,我需要使用

用C#中的线程更新ASP.net UpdatePanel控件

页面呈现后,如果不使用某种客户端技术(Javascript/jQuery等),就无法从仍在服务器上运行的代码中更改页面。

特别是在这种情况下,当你试图有效地实现一个看起来像图像滑块的东西时,你可以使用jQuery和许多滑块插件中的一个非常容易地实现它,这也会为你提供动画转换。

你不能按照自己想要的方式做你想做的事情。服务器端代码在服务器上运行,客户端代码在客户端上运行。只有当您可以让客户端重新加载您修改的页面或控件时,更新服务器上服务器控件的内容才会反映在客户端上。有很多方法可以重新加载页面/页面的部分,但在这种情况下,最好使用一些客户端JavaScript。

看起来图像是静态的,所以您可能可以使用一个简单的jquery图像滑块。有很多免费的,找到一个每5秒改变一次图像的,然后使用它,而不是因为你更喜欢用一种方式来制作Goldberg机器。

此功能是内置的。您所要做的就是在更新面板中添加一个异步触发器和计时器。

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="upOnLoading" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
    <ControlToUpdate>
        ....
    </ControlToUpdate
    <asp:Timer ID="Timer1" runat="server" Interval="2000" />
</ContentTemplate>
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="Timer1" />
</Triggers>
</asp:UpdatePanel>

以及你的方法。。。

protected void upOnLoading(object sender, EventArgs e)
{
     ...
}

当用户在其他地方浏览页面时,upOnload()将每隔Timer.Interval毫秒执行一次。