调用异步方法

时间:2019-05-14 14:51:58

标签: c# winforms asynchronous async-await

我正在尝试清除异步编程的概念。我在单击句柄上有一个按钮,我正在从数据库中获取产品列表,然后调用异步方法以从另一个来源获取其他产品属性。一旦我拥有产品的其他属性,就在调用另一个方法来更新数据库。我面临的问题是当我单击按钮时,UI被阻止。整个操作完成后,UI就会响应。我想要实现的是,当用户单击按钮时,我希望UI保持响应状态。下面是我的代码:

按钮单击

private async void button2_Click(object sender, EventArgs e)
    {
        List<string> productList = ScentOmsRepository.scentOmsRepository.getProductNoHouseBrand(); 
        List<Task> listOfTasks = new List<Task>();
            foreach (string stkCode in productList)
            {
                listOfTasks.Add(ExchequerManager.Instance.updateBrandHouseAsync2(stkCode));
            }
          await Task.WhenAll(listOfTasks);

获取额外产品属性的方法

 public async Task updateBrandHouseAsync(string product)
    {            
            Enterprise01.IStock iStock = _Toolkit.Stock;
            iStock.Index = TStockIndex.stIdxCode;
            long result = iStock.GetGreaterThanOrEqual(product);
        await ScentOmsRepository.scentOmsRepository.updateTStockBrandHouse(iStock.stUserField2, iStock.stUserField1, product);          
    }

数据库更新

internal async Task updateTStockBrandHouse(string brand, string hosue, string stkCode)
    {         
        TStockFeed tStk = (from s in scentContext.TStockFeeds
                           where s.StockCode == stkCode
                           select s).FirstOrDefault();
        tStk.Brand = brand;
        tStk.House = hosue;
        await scentContext.SaveChangesAsync();

任何想法我在这里做错了。

谢谢

0 个答案:

没有答案