日期:2014-05-17  浏览次数:20989 次

[新手求助] c# 异步编程,用了await了,为什么还是页面卡顿?已经快被逼疯了!!!!
/*******当时的情况是这样的*****/ 
public async Task<bool> LetFeedShowAsync(int index)//异步方法用于获取网络资源
        {
             
             //中间省略,直接看重点
             // reader = new StreamReader(await client.GetStreamAsync(url), Encoding.UTF8);//创建流
             //await reader.ReadAsync(forcheck, 0, checkingnumber);//读取流
        }

在另一个按钮onClick方法中,调用上面这个异步方法
 private async void ItemChoose(object sender, SelectionChangedEventArgs e)
       {
            int i = ((ListView)sender).SelectedIndex;
            await LetFeedShowAsync(i);//
        }    
然后调试的时候发现每次就在在LetFeedShowAsync的读取流(见注释)过程中UI出现了卡顿,为什么没有实现异步呢呢?? 求解释.....

(win8 app开发)

------解决方案--------------------
引用:
引用:引用:引用:引用:引用:UI不卡才怪。你可以另外开一个线程,用独立的方法对线程控制。
就不会影响UI线程

引用:UI不卡才怪。你可以另外……

async private void button1_Click(object sender, RoutedEventArgs e)
        {
            textBlock1.Text = await test();
        }

        async Task<string> test()
        {
            int i = 0;
            Action Act = delegate() { Thread.Sleep(1000); i += 1000; };
            for (int a = 0; a < 5; a++)
            {
                await Task.Run(Act);
                textBlock1.Text = "等待了" + i.ToString() + "毫秒";
            }
            return "5000毫秒等待后返回结果";
        }

你们看到贴了个例子阿~~~