首页 新闻 会员 周边

WPF有关线程的问题

0
悬赏园豆:50 [已解决问题] 解决于 2017-04-10 14:33

用WPF实现网络下载图片显示
要求:
1.通过线程方式进行网络图片下载(图片地址:http://s1.hao123img.com/index/images/newlogo-186X68.png)
2.下载图片过程中应优先考虑程序界面不会卡死
3.图片下载完成后立即显示界面

最近在学线程,找了一个题目,尝试了一下,做不出来,请大家帮帮忙,贴出代码。

lanyefeng2008的主页 lanyefeng2008 | 初学一级 | 园豆:20
提问于:2013-05-05 17:47
< >
分享
最佳答案
0

public delegate void DownPicDelegate();

        private void btnDownLoad_Click(object sender, RoutedEventArgs e)
        {
            btnDownLoad.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                new DownPicDelegate(DownLoadImage));
        }

        private void DownLoadImage()
        {
            if (File.Exists(@"d:\mobile.gif"))
            {
                File.Delete(@"d:\mobile.gif");
            }
            System.Net.WebClient wc = new System.Net.WebClient();
            wc.Headers.Add("User-Agent", "Chrome");
            wc.DownloadFile("http://s1.hao123img.com/index/images/newlogo-186X68.png", @"d:\mobile.gif");
            BitmapImage image = new BitmapImage(new Uri(@"d:\mobile.gif", UriKind.Absolute));
            img.Source = image;
        }

lanyefeng2008 | 初学一级 |园豆:20 | 2013-05-29 16:53
其他回答(1)
0

wpf没玩过,思路就像下面这样

1、首先,你要使用ThreadPool去开启一个线程执行你下载你的图片的委托。(.net4.5还可以使用TPL)

2、委托代码类似如下:

string url = "http://images.cnblogs.com/logo_small.gif";
string filepath = "x:\\pic.jpg";
WebClient mywebclient = new WebClient();
mywebclient.DownloadFile(url, filepath);

3、通过步骤二会得到图片的二进制流,然后使用委托中还要加入使用Dispatcher的Invoke或BeginInvoke方法把图片放到你指定的控件上。

另外参考:异步编程:IAsyncResult异步编程模型 (APM)

收获园豆:50
滴答的雨 | 园豆:3660 (老鸟四级) | 2013-05-05 23:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册