【发布时间】:2023-03-17 14:03:01
【问题描述】:
我正在使用以下代码进行测试以显示数据,然后在一段时间后使用异步将其删除。
我遇到的问题是我想显示标签和文本,然后执行异步但是异步在我的代码的第一部分之前运行。
有没有一种方法可以让我先运行代码然后执行异步等待?
<form id="form1" ondatabound="Page_Load()" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label" Visible="false"></asp:Label><br /><br />
<asp:Button ID="Button1" class="btn btn-error" OnClick="Button1_Click" runat="server" Text="Button" /><br /><br />
<asp:TextBox ID="TextBox1" ReadOnly="false" Text="" Visible="true" runat="server"></asp:TextBox><br /><br />
<asp:TextBox ID="TextBox2" ReadOnly="false" Text="" Visible="true" runat="server"></asp:TextBox><br />
</div>
</form>
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//TextBox1.Text = "TestEmail";
//TextBox2.Text = "TestPassword";
}
//When Button1 is clicked then show/hide the title label
protected void Button1_Click (object sender, EventArgs e)
{
if (Label1.Visible == false)
{
Label1.Visible = true;
Label1.Text = "Please use this link to login: www.test.com";
TextBox1.Text = "TestingData";
}
else
Label1.Visible = false;
ClearMessages();
}
public async Task SyncTest()
{
await Task.Delay(5000); // 5 second delay
this.ClearMessages();
}
protected void ClearMessages()
{
TextBox1.Text = "";
TextBox2.Text = "";
Label1.Text = "";
}
}
【问题讨论】:
-
如果你使用 await 线程会等待方法被执行然后继续。但是,如果页面已呈现并传递给客户端,我不确定您是否仍然可以传递信息。您可以通过在 5 秒后调用脚本进行清理来解决此客户端问题。
-
我认为您应该查看客户端代码 (JavaScript) 以显示/隐藏文本。您的 asp.net 代码在服务器上运行!
-
您似乎认为 async/await 将使您能够更改浏览器中已呈现的页面。它不会,有 javascript 。
-
您可以使用 ViewState 和 StateManager (ajax) 执行此操作,但我不确定这样的考虑是否真的与任务和异步有关.. 因为 XHR 调用和机制本质上是异步方面。
-
感谢你们的cmets,这极大地增进了我的理解。
标签: c# asp.net webforms async-await