using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Threading;
namespace ryControls
{
///
/// 超级图片控件,支持加载工程内部图片、异步加载网络图片
///
public partial class SuperPictureBox : PictureBox
{
///
/// 超级图片控件,支持加载工程内部图片、异步加载网络图片
///
public SuperPictureBox()
{
InitializeComponent();
}
///
/// 图片所在上级域名
///
[Description("图片所在上级域名")]
public string ImageDomain { get; set; }
///
/// 图片资源所在上级文件夹
///
[Description("图片资源所在上级文件夹")]
public string ImageResFolder { get; set; }
///
/// 根据不同前缀,加载不同格式图片。i:表示工程内置图片;s:表示T_ImageDomain域名下的图片,u:表示指定url的图片;f:表示本地图片
///
///
public void LoadPicBySUrl(string sUrl)
{
string HeadStr = sUrl;
if (HeadStr.Length > 2)
{
string keyStr = HeadStr.Substring(0, 2);
if (keyStr == "i:")//内置
{
this.Image = ButtonImages.ImageObject.GetResBitmap(Application.ExecutablePath, ImageResFolder + HeadStr.Substring(2));
}
else if (keyStr == "s:") //服务器上的地址
{
LoadFromUrl(ImageDomain + HeadStr.Substring(2), true);
}
else if (keyStr == "u:") //URL地址
{
LoadFromUrl(HeadStr.Substring(2), true);
}
else if (keyStr == "f:") //本地图片
{
LoadFromFile(HeadStr.Substring(2));
}
}
}
private void LoadPic(string url)
{
Image image=null;
try
{
WebRequest webreq = WebRequest.Create(url);
WebResponse webres = webreq.GetResponse();
Stream stream = webres.GetResponseStream();
image = Image.FromStream(stream);
stream.Close();
}
catch { }
try
{
DateTime dt = DateTime.Now.AddSeconds(5);
while(!this.IsHandleCreated)
{
Thread.Sleep(10);
if (dt < DateTime.Now) { break; }
}
this.Invoke(new Action(() =>
{
this.Image = image;
}));
}
catch { }
}
///
/// 加载本地图片,加载完毕不会占用本地图片
///
///
public void LoadFromFile(string path)
{
this.Image = ryCommon.RyImage.LoadPic(path);
}
///
/// 加载指定url图片
///
/// url位置
/// 是否异步
public void LoadFromUrl(string url, bool isAsyn)
{
if (isAsyn)
{
void starter() { LoadPic(url); }
new Thread(starter).Start();
}
else
{
LoadPic(url);
}
}
}
}