[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 { }
}
}
}
}

让PictureBox支持URL显示图片的更多相关文章

  1. IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)

    编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload ...

  2. winform下picturebox控件显示图片问题

    viewData_pictureBox.SizeMode=PictureBoxSizeMode.StretchImage;图片会自动按照比例缩放来完全显示在你的PictureBox中.

  3. 一行实现QQ群组头像,微信群组,圆角等效果. 并支持url直接加载图片

    说点题外话. Coding中我们总是经历着这么几个过程. 学会使用: 不管是API也好, 开源库也好. 总是在最开始的学会去用. 了解实现原理: 可能会因为一些不兼容, 代码的异常状态的处理不够完美等 ...

  4. EmguCV控件Emgu.CV.UI.ImageBox及C# picturebox显示图片连续刷新出现闪烁问题

    在上一篇里,EmguCV(OpenCV)实现高效显示汉字及叠加  实现了视频叠加及显示,但存在问题,就是 Emgu.CV.UI.ImageBox及C# picturebox显示图片时都会出现闪烁,尤其 ...

  5. Web前端学习(4):显示图片、url与文件路径

    本章主旨 介绍<img>标签及其基本属性:介绍URL和文件路径 在上一章中,我简单地介绍了HTML的一些基本标签及基本属性,例如,我们用<p>标签来标记文本段落,用<h1 ...

  6. 重写TreeView,多层级节点下批量显示图片,图片支持缩略图和文件名列表切换,支持调用者动态匹配选中,支持外界拖入图片并添加到对应节点下

    1.先看下整体效果 2.前端代码 <UserControl x:Class="iPIS.UI.Base.Tree.ImageTreeControl" xmlns=" ...

  7. 如何在启用SharePoint浏览器功能的InfoPath 表单中添加托管代码以动态地加载并显示图片

    InfoPath 的浏览器表单不支持加载并显示图片,当然在模板中可以插入图片,但是如果想显示数据库的一幅图片,或是动态加载一张图片就无能为力了. 基实这个问题可以通过在浏览器表单中使用: " ...

  8. 我写的一个 Qt 显示图片的控件

    Qt 中没有专门显示图片的控件.通常我们会使用QLabel来显示图片.可是QLabel 显示图片的能力还是有点弱.比方不支持图像的缩放一类的功能.使用起来不是非常方便. 因此我就自己写了个简单的类. ...

  9. ie8浏览器 图片本身问题导致 无法显示图片--- 诡异现象的排查分享

    引子:   前段时间 做新版2.0 首页 的时候, 总感觉 新版首页 线上 精彩回顾下的 2张图片颜色怪怪的,当时以为是图片压缩太厉害导致的,由于实在太忙就没太在意!以下 是来自线上 截图:  红色方 ...

随机推荐

  1. shell中{}的妙用

    shell中${}的妙用   1. 截断功能 ${file#*/}:       拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:    拿 ...

  2. MyBatis操作指南-与Spring集成(基于注解)

  3. DataTables样式

    Styling 官方链接 AdminLTE HTML代码 <div class="row"> <div class="col-xs-12"&g ...

  4. Redis: OOM command not allowed when used memory > ‘maxmemory’

    现象 日志里出现异常: OOM command not allowed when used memory > 'maxmemory' 原因 内存已满,不允许再存数据了,可以通过redis-cli ...

  5. openfire更改数据库

    修改openfire安装目录下./conf/openfire.xml <setup>true</setup>中的true为false,重新启动,然后配置

  6. 用SQL命令查看Mysql数据库大小

    要想知道每个数据库的大小的话,步骤如下: 1.进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2.查询所有数据的大小: s ...

  7. 【C# 进阶】事件!直接上事件!

    http://www.tracefact.net/csharp-programming/delegates-and-events-in-csharp.aspx ZiYang 张,何许人也?看了他写的博 ...

  8. 【Xpath学习】xpath都不会,说什么你做网站自动化测试的?

    嗯我确实不太会.感觉我写的随笔很渣,不一定对,大家不要被我误导了,最好不要看.我也尽量保证写出来都是对的. 首先这俩给我搞晕了 1. // 不管层级:  相对路径 2. /  care 层级: 表示到 ...

  9. (三)内存 SDRAM 驱动实验 (杨铸 130 页)(勉强能懂个大概)

    SDRAM 芯片讲解: 地址: 行地址 (A0-A12) 列地址 (A0-A8)    片选信号(BA0 BA1)(L-BANK)(因为SDRAM有 4片) 两片SDRAM 连线唯一区别在 UDQM ...

  10. T3500通过PXE克隆报“Unable to Control A20 Line XMS Driver not installed”

    问题:使用deepin_ghost1.6中的PXE网络GHOST时提示如下错误信息: ERROR:Unable to control A20 line!XMS Driver not installed ...