C# 自动更新 功能 Dome

zhulong1111 2011-05-26 05:52:07
加精
应朋友要求,需要一个C# winform的自动更新要求 本来想想很简单 但实际操作也弄了一个下午(可能技术水平问题) 话不多说代码奉上。如有需要Email:zhulong1111@yahoo.cn 现给新手学习
主界面

thread+delegate实现信息提示


下载的文件(实际下载下来还要对文件解压,覆盖。。这些小功能就没去写了)

主页代码:

public partial class Form1 : Form
{
Thread th = null;

public Form1()
{
InitializeComponent();
}
public delegate void SetText(string text,int i); //声明委托
/// <summary>
/// 委托实现
/// </summary>
/// <param name="value">值</param>
/// <param name="i">1表示为本地版本控件,2表示服务器版本控件,3表示提示信息控件</param>
public void setTextVlue(string value,int i)
{
if (i == 1)
lblOld.Text = value;
else if (i == 2)
lblNew.Text = value;
else if (i == 3)
lblMessage.Text = value;
else if (i == 4)
button1.Enabled = true;
}
/// <summary>
/// 窗体加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
th = new Thread(new ThreadStart(threadFun));
th.Start();
button1.Enabled = false;
}
public void threadFun()
{
lblMessage.Invoke(new SetText(setTextVlue), "获取本地版本号。。。",3);
string enition = GetSourceList(System.AppDomain.CurrentDomain.BaseDirectory + "UpXml.xml", "Version")[0];
lblOld.Invoke(new SetText(setTextVlue),enition,1);
Thread.Sleep(2000);
lblMessage.Invoke(new SetText(setTextVlue),"获服务器地版本号。。。",3);
Thread.Sleep(2000);
string url = GetSourceList(System.AppDomain.CurrentDomain.BaseDirectory + "UpXml.xml", "url")[0];
enition = GetSourceList(url, "Version")[0];
lblNew.Invoke(new SetText(setTextVlue),enition,2);
lblMessage.Invoke(new SetText(setTextVlue), "数据获取结束", 3);
button1.Invoke(new SetText(setTextVlue), "打开按钮状态", 4);
}

/// <summary>
/// 读取xml获取数据
/// </summary>
/// <param name="xmlfilePath">xml路径</param>
/// <param name="nodeName">点名称</param>
/// <returns>xml值</returns>
public static List<string> GetSourceList(string xmlfilePath, string nodeName)
{
XmlTextReader textReader = null;
List<string> listStr = new List<string>();
try
{
textReader = new XmlTextReader(xmlfilePath);

while (textReader.Read())
{
if (textReader.NodeType == XmlNodeType.Element && textReader.IsStartElement())
{
if (textReader.Name == nodeName)
{
listStr.Add(textReader.ReadInnerXml());
}
}
}

}
catch(Exception ee)
{
textReader.Close();
listStr.Add(ee.Message);
}
return listStr;
}

下载页面代码


private void DownList_Load(object sender, EventArgs e)
{
dt = getSource();
dataGridView1.DataSource = dt;
}
/// <summary>
/// 转化为DateTable 用于绑定
/// </summary>
/// <returns></returns>
public DataTable getSource()
{
string url = Form1.GetSourceList(System.AppDomain.CurrentDomain.BaseDirectory + "UpXml.xml", "url")[0];
List<string> list = Form1.GetSourceList(url, "UpdateFile");
DataTable tblDatas = new DataTable("Datas");
DataColumn dc = null;
string url2 = Form1.GetSourceList(url, "ut")[0];
//赋值给dc,是便于对每一个datacolumn的操作
dc = tblDatas.Columns.Add("ID", Type.GetType("System.Int32"));
dc.AutoIncrement = true;//自动增加
dc.AutoIncrementSeed = 1;//起始为1
dc.AutoIncrementStep = 1;//步长为1
dc.AllowDBNull = false;//
dc = tblDatas.Columns.Add("name", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("lenght", Type.GetType("System.String"));
dc = tblDatas.Columns.Add("url", Type.GetType("System.String"));
DataRow newRow;
for (int i = 0; i < list.Count; i++)
{
newRow = tblDatas.NewRow();
newRow["name"] = list[i];
newRow["lenght"] = list[i].ToString().Length;
newRow["url"] =url2+"//"+ list[i].ToString();
tblDatas.Rows.Add(newRow);
}
return tblDatas;
}
//设置进度条
public void setProgressBar()
{
progressBar1.Value = 0;
progressBar1.Minimum = 0;
progressBar1.Maximum = dt.Rows.Count;
progressBar1.Step = 1;
for (int i = 0; i < dt.Rows.Count; i++)
{
progressBar1.Value += 1;
WebClient client = new WebClient();
client.DownloadFile(dt.Rows[0]["url"].ToString(), dt.Rows[i]["name"].ToString());
Thread.Sleep(1000);
}
}
private void button1_Click(object sender, EventArgs e)
{
setProgressBar();
}
...全文
11571 242 打赏 收藏 转发到动态 举报
写回复
用AI写文章
242 条回复
切换为时间正序
请发表友善的回复…
发表回复
zx_001 2013-07-05
  • 打赏
  • 举报
回复
好东西,辛苦了
x_jefferson 2013-07-05
  • 打赏
  • 举报
回复
感谢分享,目测会被版主推荐
wzuomin 2013-07-02
  • 打赏
  • 举报
回复
不错,谢谢分享。。。
heshengfen123 2013-06-19
  • 打赏
  • 举报
回复
非常感谢楼主的分享,楼主的开发思路是一种"拉"的方式(公网服务器-客户端),我在想有没有一种推的方式,就是服务器端有更新然后通知客户端去更新,而不是客户端定时去请求。
x_jefferson 2013-05-13
  • 打赏
  • 举报
回复
不错! 谢谢分享。
aggrewolf 2013-05-11
  • 打赏
  • 举报
回复
不错,非常棒
fysz007 2013-03-20
  • 打赏
  • 举报
回复
mk123456
sunxuetao1985 2013-01-16
  • 打赏
  • 举报
回复
不错不错学习了
feng0597 2012-11-16
  • 打赏
  • 举报
回复
学习一下!!!
nextwhy 2012-11-11
  • 打赏
  • 举报
回复
绝对的 好例子 谢谢 楼主分享
humin332 2012-07-18
  • 打赏
  • 举报
回复
个人觉得要自动完成全部过程 才有含量
chendongqi3522835 2012-05-28
  • 打赏
  • 举报
回复
谢谢分享。。。
laoyao_38 2012-05-25
  • 打赏
  • 举报
回复
感谢楼主~~~
heshengfen123 2012-03-02
  • 打赏
  • 举报
回复
楼主,你好,自动更新功能我也是用这种办法去处理,但我一直在想这种办法的效率怎么样,有没有更好的办法呢?还有就是不知道楼主有没有研究过腾讯的更新机制?
阿桐 2011-07-18
  • 打赏
  • 举报
回复
毁人不倦
zjh_c_s_d_n 2011-07-05
  • 打赏
  • 举报
回复
顶! 顶! 顶!LZ真棒!
肆意年华 2011-07-05
  • 打赏
  • 举报
回复
- 很强大 感谢分享
特哥 2011-06-23
  • 打赏
  • 举报
回复
虽然看不懂 但是先留下来 等以后再看。 也可以给我儿子看看 嘿嘿。
cjfriends 2011-06-23
  • 打赏
  • 举报
回复
谢谢楼主的分享,学习
龙炫 2011-06-23
  • 打赏
  • 举报
回复
值得收藏》。。。。。。。。
加载更多回复(210)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧