使用Async时无响应的UI;等待

本文关键字:UI 等待 响应 Async 使用 | 更新日期: 2023-09-27 18:06:41

我试图在我的编码中使用asyncawait,而我将大量数据从我的WCF服务传输到我的WPF客户端应用程序。现在它确实需要2-3分钟来加载数据,但现在我的UI 无响应的总时间。它不是很好用。有没有办法让我的UI响应,而数据加载与编码,我目前有?

public pgSysproStock()
{
    InitializeComponent();
    SysproStock.WindowState = WindowState.Normal;
    this.UpdateStockAsync();
}
private async void UpdateStockAsync()
{
    dgSysproStock.IsEnabled = false;
    using (TruckServiceClient TSC = new TruckServiceClient())
    {
        var allStock = await TSC.GetSysproStockAsync();
        dgSysproStock.ItemsSource = allStock.Select(item =>
                    new AllStock
                    {
                        Id = item.Id,
                        StockCode = item.StockCode,
                        Description = item.Description,
                        ConvFactAltUom = item.ConvFactAltUom,
                        ConvMulDiv = item.ConvMulDiv,
                        ConvFactOthUom = item.ConvFactOthUom,
                        MulDiv = item.MulDiv,
                        Mass = item.Mass,
                        Updated_Supplier = item.Updated_Supplier,
                        CycleCount = item.CycleCount,
                        ProductClass = item.ProductClass.ToString(),
                        UnitCost = item.UnitCost,
                        Discount = item.Discount,
                        Warehouse = item.Warehouse,
                        MinimumStock = item.MinimumStock,
                        MaximumStock = item.MaximumStock,
                        StockForNow = item.StockForNow,
                        CoilWidth = item.CoilWidth,
                        SheetCoilLength = item.SheetCoilLength,
                        MaterialThickness = item.MaterialThickness
                    }).ToArray();
        dgSysproStock.IsEnabled = true;
    }
}

谢谢你的建议!: D

使用Async时无响应的UI;等待

您的操作启动操作不正确。我建议您为您的窗口创建处理程序On Load或其他事件,将其标记为异步并从那里执行调用。应该像这样简单:

private async void Form1_Load(object sender, EventArgs e)
{
    dgSysproStock.IsEnabled = false;
    using (TruckServiceClient TSC = new TruckServiceClient())
    {
        var allStock = await TSC.GetSysproStockAsync();
        dgSysproStock.ItemsSource = allStock.Select(item =>
                        new AllStock
                        {
                           ...
                        }).ToArray();
        dgSysproStock.IsEnabled = true;
    }
}

注意,我使用的是Form。加载事件,但您可以使用不同的。