C# 在异步操作期间更新网页
我正在通过其公开的C# 在异步操作期间更新网页,c#,asp.net,async-await,user-experience,C#,Asp.net,Async Await,User Experience,我正在通过其公开的operationAsync方法异步使用web服务,但实际上我无法按预期更新UI protected async void DownloadInfo_Click(object sender, EventArgs e) { // Change text of status label to reflect work being done. DownloadStatus.Text = "Connecting to service..."; using (v
operationAsync
方法异步使用web服务,但实际上我无法按预期更新UI
protected async void DownloadInfo_Click(object sender, EventArgs e)
{
// Change text of status label to reflect work being done.
DownloadStatus.Text = "Connecting to service...";
using (var client = new Service.ServiceClient())
{
DownloadStatus.Text = "Getting data...";
var response = client.DoOperation(args);
// Handle the response in any way appropriate
var control = new HtmlGenericControl();
control.InnerHtml = response.Value;
DownloadStatus.Text = "Operation complete.";
// Write the response from the service to the page. (testing)
ResultDiv.Controls.Add(control);
}
}
正如那些比我更有经验的人已经注意到的那样,DownloadStatus
标签文本在所有工作完成之前不会真正反映更新
这并不能真正实现良好的用户体验,因此我需要找到一种不同的方式
一个这样的答案建议使按钮单击同步,但让它调用异步线程方法。听起来很奇怪,但是UI更新将在事件处理程序上完成,而异步工作将在其他地方完成
我还发现who's answer构建了一个帮助器类来管理这类事情,但我不太清楚如何定义这里的进度消息。。。在我看来,它们与示例中的情况基本相同。对于我希望我的应用程序执行的每个操作,我都必须复制此代码,这意味着我的项目中有很多膨胀
非常感谢您的帮助。您应该将asp.net代码放入UpdatePanel中 阅读这些教程,了解如何正确使用它:和 下面是一个有关其工作原理的快速示例:
<asp:UpdatePanel ID="MyUpdatePanel" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
<label runat="server" id="MyLabel">LabelInfo</label>
<asp:LinkButton ID="MyLinkButton" runat="server" OnClick="ChangeMyLabel_Click">Click me</asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
protected void ChangeMyLabel_Click(object sender, EventArgs e)
{
MyUpdatePanel.Update();
MyLabel.Text = "Woah I just changed at runtime!!";
}
标号
点击我
受保护的无效更改标签单击(对象发送方,事件参数e)
{
MyUpdatePanel.Update();
MyLabel.Text=“哇,我刚刚在运行时更改了!!”;
}
对操作同步的调用在哪里?那个代码有编译警告吗?