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=“哇,我刚刚在运行时更改了!!”;
}

操作同步的调用在哪里?那个代码有编译警告吗?