首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

C# 自动更新 效能 Dome

2013-01-23 
C# 自动更新 功能 Dome应朋友要求,需要一个C# winform的自动更新要求本来想想很简单 但实际操作也弄了一个

C# 自动更新 功能 Dome
应朋友要求,需要一个C# winform的自动更新要求  本来想想很简单 但实际操作也弄了一个下午(可能技术水平问题) 话不多说代码奉上。如有需要Email:zhulong1111@yahoo.cn  现给新手学习
主界面
C# 自动更新 效能 Dome
thread+delegate实现信息提示
C# 自动更新 效能 Dome
C# 自动更新 效能 Dome
下载的文件(实际下载下来还要对文件解压,覆盖。。这些小功能就没去写了)
C# 自动更新 效能 Dome
主页代码:


 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();
        }

 
[解决办法]
好东西 学习一下
[解决办法]
谢谢楼主的分享
[解决办法]
mark

[解决办法]
顶一个
值得推荐一下

期待楼主下一个精彩帖子
[解决办法]
精彩帖子
[解决办法]
很好的东西。。。。义无反顾的顶起
------解决方案--------------------


不错,谢谢楼主分享!
[解决办法]
我喜欢,我学习了
[解决办法]

谢谢分享。。。C# 自动更新 效能 Dome
[解决办法]
自動更新?? Visual Studio可以設置的。。。不用写代码的。
[解决办法]
呵呵,实现起来很容易的。
[解决办法]
不错。很好。谢谢LZ
[解决办法]
我喜欢另一线程访问UI线程的那一段代码!!!
[解决办法]
自动更新 下自己的知识lib
[解决办法]
谢谢楼主的分享C# 自动更新 效能 Dome
[解决办法]
thx.
[解决办法]
C# 自动更新 效能 Dome
[解决办法]
不错,对新手很有用的。
[解决办法]
不错,谢谢分享啦
[解决办法]
谢谢 分享
[解决办法]
谢谢楼主的分享
[解决办法]
谢谢分享。
[解决办法]
okok
[解决办法]
ClickOnce部署技术就能自动实现,还费那么大的神干嘛?
[解决办法]
感谢分享!
[解决办法]
tks,学习一下
[解决办法]

引用:
DDDDDDDDDDDD
,,,,,,,,,,,,,,,
[解决办法]
看看,学习
[解决办法]
收藏啦!

热点排行