Skip to main content
 首页 » 编程设计

c#之使用长时间运行的方法在 ASP.NET Web 窗体中阻止网页

2024年01月13日32del

我想在我的 GridView 中显示数据库结果,但调用长时间运行的方法时网页速度极慢。

在 GridView 中,我有一个带有以下项目模板的模板字段:

<ItemTemplate>   
        <asp:Label ID="lblNumResults" runat="server" Text='<%# GetNumCrawlResults(Convert.ToInt32(Eval("id"))) %>'></asp:Label> 
</ItemTemplate> 

这是对应的方法:

public string GetNumCrawlResults(int jobId) 
{ 
    var task = Task.Run(() => Utilities.GetNumCrawlResults(jobId)); 
    //this is slow and blocks the GUI 
    return Convert.ToString(task.Result); 
} 

这是数据库查询:

public static async Task<int> GetNumCrawlResults(int jobId) 
{ 
    DocumentCollection collection = await GetOrCreateCollectionAsync(database.SelfLink, Convert.ToString(jobId)); 
 
    var result = (from c in documentDb.CreateDocumentQuery<Shared.CrawlResult>(collection.SelfLink) 
                  select c).AsEnumerable(); 
    return result.Count(); 
} 

有什么方法可以在异步方法完成后分配标签文本吗?

谢谢

请您参考如下方法:

您的页面是否呈现结果?我的印象是缺少 task.wait() 语句。

无论如何,在你的情况下我会使用 Ajax 和 Knockout(或类似的)。