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 ...
随机推荐
- UVALive 7143 Room Assignment(组合数学+DP)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...
- SSH整合报错:org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped[......]
非常诡异的报错,信息如下:org.hibernate.hql.internal.ast.QuerySyntaxException: User is not mapped [select count(* ...
- windows2003 iis php 配置后无法执行php页面
1.问题:可以访问静态页面,无法访问php脚本页面,显示404 解决:
- JS数组操作示意图(shift,unshift,pop,push)
shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] b: ...
- vc6 使用的那些事
VC6.0中Release下调试模式设置 http://blog.csdn.net/wangqinghao/article/details/7730428
- thinkPHP5.x 更新字段为 NULL
简介 tp5.x 提供了丰富的数据模型和数据库操作的方法,只要涉及 think\Model think\Query等,其中有一个软删除的 feature,可以指定字段$deleteTime来标记 re ...
- Autumn is a second spring when every leaf is a flower.
Autumn is a second spring when every leaf is a flower. 秋天即是第二个春天,每片叶子都是花朵.——阿尔贝·加缪
- 安装win7的那些事
由于win7系统只支持MBR格式的分区,如果强行将win7安装到UEFI分区方式的硬盘上将不能启动,所以,如果你要给别人的win8或者win10的OEM系统安装win7的话,记得先将重要数据备份出去, ...
- cmd 下切换目录
隔了段时间没用cmd 工作台,发现不会切换目录了,感觉特sb,为避免再次出现sb情况,记下来在说 1.切换磁盘(磁盘字母) d: 2.切换到指定目录 cd d:\www 在cmd下执行php文件 c: ...
- jquery_ui_api中文
http://files.cnblogs.com/files/xjyggd/JQuery_UI_API.rar