在任务执行期间使面板不可见

时间:2019-03-02 14:57:35

标签: c# asp.net asynchronous

在长时间运行的任务中,我尝试使面板不可见。但这行不通。如果使用编译器,则可以在网页上看到可见状态的更改,但看不到。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="homepage.WoW._default" Async="true" %>

这是我的更新面板:

<asp:UpdatePanel ID="up_mplus" runat="server" UpdateMode="Conditional">
 <ContentTemplate>
  <asp:Panel ID="p_test" runat="server">
   <span style="position:absolute; width:calc(100% - 40px); height:25px; text-align:center">Mythic plus Season:&nbsp;<asp:DropDownList ID="ddl_mplus_season" runat="server" BackColor="Transparent" style="color:gainsboro; width:150px; height:21px; top:5px;" OnSelectedIndexChanged ="ddl_mplus_season_SelectedIndexChanged"></asp:DropDownList></span>
    <div id="div_mplus" runat="server" style="width:100%; height:calc(100% - 30px); top:30px"></div> 
 </asp:Panel>
</ContentTemplate>

这是后面的c#代码:

protected void btn_reolad_bottom_left_Click(object sender, ImageClickEventArgs e)
    {
        testc();
    }

    protected async void testc()
    {
        this.p_test.Visible = false;
        this.up_mplus.Update();
        await Task.Run(() =>
        {

            System.Threading.Thread.Sleep(5000);
        });

        this.p_test.Visible =  true;
        this.up_mplus.Update();
    }

1 个答案:

答案 0 :(得分:0)

从不同线程更新UI可能导致非法的跨线程操作异常。 您需要调用它。例如:

p_test.Invoke((MethodInvoker)(() => { p_test.Visible = false; }));