winform异步系统升级—BackgroundWorker
BackgroundWorker用法实例
自己的代码,就是要执行的代码写到dowork里,ProgressChanged事件是控制进度时用的,最后的Completed事件进度完成,也就是dowork里的代码执行完成了
public BackgroundWorker bgWork;
bgWork = new BackgroundWorker();
bgWork.WorkerReportsProgress = true;
bgWork.DoWork += new DoWorkEventHandler(bgWork_DoWork);
bgWork.ProgressChanged += new ProgressChangedEventHandler(bgWork_ProgressChanged);
bgWork.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWork_RunWorkerCompleted);
dp = new DownLoadProgress();
dp.progressBar1.Maximum = 1000;
dp.Show();
void bgWork_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
try
{
dp.lb_dw.Visible = true;
dp.Close();
if (e.Error != null)
{
MessageBox.Show("升级失败" + e.Error.Message);
}
else if (e.Result != null && e.Result.Equals(false))
{
}
else
{
if (TZSys.Common.SysUpdate.Update.SysUpdate.PerUpdate(AppDomain.CurrentDomain.BaseDirectory + "update\\"))
{
#region 升级数据库
List<string> sqlstr = new List<string>();
string[] files = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "update\\");
foreach (string file in files)
{
if (file == AppDomain.CurrentDomain.BaseDirectory + "update\\"+"sql.txt")
{
using (FileStream fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "update\\sql.txt", FileMode.Open, FileAccess.Read)) {
StreamReader sr = new StreamReader(fs);
while (sr.Peek()>=0)
{
sqlstr.Add(sr.ReadLine());
}
sr.Close();
fs.Close();
}
}
}
if (sqlstr.Count > 0)
{
string datapath = AppDomain.CurrentDomain.BaseDirectory + "Data";
string[] directorys = Directory.GetDirectories(datapath);
if (directorys.Length > 0)
{
foreach (string database in directorys)
{
string[] str = database.Split('\\');
string path = database + "\\" + str[str.Length-1]+".DB";
SqlOper sql = new SqlOper();
sql.DealSql(path, sqlstr);
}
}
File.Delete(AppDomain.CurrentDomain.BaseDirectory + "update\\" + "sql.txt");
}
#endregion
if (TZSys.Common.SysUpdate.Update.SysUpdate.StartUpdate(AppDomain.CurrentDomain.BaseDirectory + "update\\"))
{
//保存升级后的版本号
XmlDocument xml = new XmlDocument();
xml.Load(BlackBoard.DirectoryCurrent + "XML\\update.XML");
if (upcmid != "" && upmainid!="")
{
xml.GetElementsByTagName("cmpid")[0].InnerText = upcmid;
xml.GetElementsByTagName("mainid")[0].InnerText = upmainid;
xml.Save(BlackBoard.DirectoryCurrent + "XML\\update.XML");
}
if (MessageBox.Show("升级成功,是否重新启动", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (File.Exists(BlackBoard.DirectoryCurrent + "SysUpdate.dll"))
File.Delete(BlackBoard.DirectoryCurrent + "SysUpdate.dll");
Application.Exit();
Process myProcess = new Process();
//string fileName = "ServiceClientIMForm.exe";startexe
string fileName = startexe;
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(fileName);
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();
//Environment.Exit(0);
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//基本不用动
void bgWork_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
dp.progressBar1.Value = e.ProgressPercentage;
}
void bgWork_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = (BackgroundWorker)sender;
try
{
if (!e.Argument.ToString().Contains(".zip"))
{
MessageBox.Show("更新包不是.zip文件,无法下载");
e.Result = false;
}
else if (!AppendDownLoad(e.Argument.ToString().Split('@')[0], e.Argument.ToString().Split('@')[1], bw))
{
MessageBox.Show("下载失败");
e.Result = false;
}
}
catch (Exception ex)
{
MessageBox.Show("下载失败" + ex.Message);
}
}
//BackgroundWorker的调用方法
public void DownloadFile(string url, string fileName)
{
fileName = DirPath + "\\" + fileName;
DFileName = fileName;
bgWork.RunWorkerAsync(url + "@" + fileName);//里面是参数是bgWork_DoWork事件的e.Argument
}
winform异步系统升级—BackgroundWorker的更多相关文章
- winform异步进度条LongTime
winform异步进度条LongTime,运用到回调函数 定义事件的参数类: namespace LongTime.Business { // 定义事件的参数类 public class ValueE ...
- WinForm中使用BackgroundWorker异步加载数据并使用进度条
在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...
- C# 使用BackgroundWorker实现WinForm异步
写了一个基于BackgorundWorker演示异步操作的例子.由于这个理基本上实现了BackgorundWorker的大部分功能:异步操作的启动.操作结束后的回调.异步操作的撤销和进度报告等等.尽管 ...
- 实现 winform 异步跨线程访问UI控件
在开发winform时经常会用到多线程防止界面出现假死现象,比如当你单击某个按钮时,需要执行很多代码,但是在执行过程中想实时的将当前执行的情况报告给用户,类型进度条或文本什么的. 这个时候很显然,如果 ...
- 一个简单的webservice的demo(下)winform异步调用webservice
绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...
- 1 Winform 异步更新控件
刚才看到有人问为了winfrom中,在大数据绑定的时候出现画面假死的状态,为了解决这个问题希望通过再开一个线程来给控件绑定数据,可是画面还是会假死.现在看到的方法有1.掩耳盗铃法(Control.Ch ...
- 基于事件的异步模式——BackgroundWorker
实现异步处理的方法很多,经常用的有基于委托的方式,今天记录的是基于事件的异步模式.利用BackgroundWorker组件可以很轻松的实现异步处理,并且该组件还支持事件的取消.进度报告等功能.本文以计 ...
- Winform中设置BackgroundWorker在取消时关闭后台进程
场景 在Winform中拖拽 一个BackgroundWorker控件,配合进度条控件能开启一个后台线程并报告进度条进度. 但是在执行后台线程的任务时,如果想要取消,怎样让其停止执行. 注: 博客主页 ...
- winform异步加载数据到界面
做一个学习记录. 有两个需求: 1.点击按钮,异步加载数据,不卡顿UI. 2.把获取的数据加载到gridview上面. 对于需求1,2,代码如下: public delegate void ShowD ...
随机推荐
- My family No.1
Ok, in my family, there are seven people including my father, mother, three sisters, one brother and ...
- Ubuntu下安装Docker
1. 安装前先检查系统对docker的支持,尽可能安装高版本的系统,比如Ubuntu14.04等,安装前可以先检查系统信息. Docker需要64位机器,需要运行在3.8以上的内核上,需要操作系统支持 ...
- Ado.net 数据库读取文件
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; using ...
- Ideas about the future of management
1. Business markets a. greater competition among companies b. increase in power of global companies ...
- Xcode 7 PCH宏文件的配置和使用---学会使用宏定义
使用宏的目的是什么? 由于实际开发中,有时候一些设置信息需要重复使用(例如设置打印信息.配置颜色.配置宽度等),如果每次都手动去敲每次都去创建会很麻烦.虽然宏使用的时候会占用内存,可是目前来说大部分开 ...
- JS验证身份证号码合法性
<html><head><script type="text/javascript"> function validateCard(){ ...
- Linux_用户级_常用命令(1):ls
开篇语:懒是人类进步的源动力 本文原创,专为光荣之路公众号所有,欢迎转发,但转发请务必写出处! Linux常用命令第1集包含命令:ls 一.何为常用命令 人和系统交互的指令集合,构成了shell.Sh ...
- Thinkphp批量添加数据
//新建规格public function construction(){ $id = $_GET['id'];//dump($id);die; $this->assign('id', $id) ...
- 简单谈谈eclipse下搭建PhoneGap环境来开发Android程序 - linux86(转)
原来在逛园子的时候一不小心发现了一个新概念“PhoneGap”简称PG,我一直都喜欢追逐新事物,自然就产生了好奇心.于是乎我就在百度上面Google了一下PhoneGap是什么东西.简单的说就是用另一 ...
- ionic项目 环境搭建及基本操作
一.安装 1.安装node.js 3.安装ionic & cordova: 命令行输入:npm install –g cordova ionic 注:-g表示全局安装,也可以进入指定的目录安装 ...