zoukankan      html  css  js  c++  java
  • 让PictureBox支持URL显示图片

      [ToolboxItem(true)]
        public class PictureBoxURL : PictureBox
        {
            private string _url = "";
            public string ImageUrl
            {
                get
                {
                    return _url;
                }
                set
                {
                    _url = value;
                    if (String.IsNullOrEmpty(_url)) return;
                    GetImageByWebRequest(this, _url);
                }
            }
    
            public Image ImageLoading { get; set; }
    
            /// <summary>
            /// 推荐使用ByWebRequest
            /// </summary>
            /// <param name="edit"></param>
            /// <param name="url"></param>
            private void GetImageByWebClient(PictureBoxURL edit, string url)
            {
                WebClientImage tt = new WebClientImage(edit, url);
                Thread thread = new Thread(new ThreadStart(tt.Do));
                thread.Start();
    
            }
            private void GetImageByWebRequest(PictureBoxURL edit, string url)
            {
                WebRequestImage tt = new WebRequestImage(edit, url);
                Thread thread = new Thread(new ThreadStart(tt.Do));
                thread.Start();
            }
    
            public class WebClientImage
            {
                private PictureBoxURL edit;
                private string url;
    
                public WebClientImage(PictureBoxURL a, string b)
                {
                    edit = a;
                    url = b;
                }
    
                public void Do()
                {
                    try
                    {
                        edit.BeginInvoke(new Action(() =>
                        {
                            edit.Image = edit.ImageLoading;
                        }));
    
                        using (var client = new System.Net.WebClient())
                        {
                            using (var strream = client.OpenRead(url))
                            {
    
                                Image Image = new Bitmap(strream);
                                edit.BeginInvoke(new Action(() =>
                                {
                                    edit.Image = Image;
                                }));
                            }
                        }
                    }
                    catch
                    {
                        edit.BeginInvoke(new Action(() =>
                        {
                            edit.Image = null;
                        }));
                    }
                }
            }
            private class WebRequestImage
            {
                private PictureBoxURL edit;
                private string url;
    
                public WebRequestImage(PictureBoxURL a, string b)
                {
                    edit = a;
                    url = b;
                }
                public void Do()
                {
                    try
                    {
                        if (edit.IsHandleCreated)
                        {
                            edit.BeginInvoke(new Action(() =>
                            {
                                edit.Image = edit.ImageLoading;
                            }));
                        }
                        else
                            edit.Image = edit.ImageLoading;
    
    
                        var request = (HttpWebRequest)WebRequest.Create(url);
    
                        using (var response = (HttpWebResponse)request.GetResponse())
                        {
                            if (response.StatusCode == HttpStatusCode.OK)
                            {
                                using (var stream = response.GetResponseStream())
                                {
                                    Image Image = new Bitmap(stream);// Bitmap.FromStream(stream);
                                    edit.BeginInvoke(new Action(() =>
                                    {
                                        edit.Image = Image;
                                    }));
    
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        try
                        {
                            edit.BeginInvoke(new Action(() =>
                            {
                                edit.Image = null;
                            }));
                        }
                        catch { }
                    }
                }
            }
        }
    慎于行,敏于思!GGGGGG
  • 相关阅读:
    四人过桥求最短时间(《算法设计与分析》习题一的第8题) Apare_xzc
    已知中序后序遍历还原二叉树(uva 548) Apare_xzc
    大二下学期第四周周报(2019.3.24) Apare_xzc
    大二下学期第五周周报(2019.3.31) Apare_xzc
    拓扑排序复习(处女座的比赛资格)
    exgcd复习 Apare_xzc
    ACM课程设计课 Advance_Contest_1 解题报告 Apare_xzc
    使用共享内存
    使用信号量
    使用命名管道
  • 原文地址:https://www.cnblogs.com/GarsonZhang/p/5972234.html
Copyright © 2011-2022 走看看