C#使用后台进程

C#使用多线程,推荐使用BackgroundWorker。

1、定义:

BackgroundWorker BgWorker = new BackgroundWorker();

2、初始化:

BgWorker.WorkerReportsProgress = true;
BgWorker.DoWork += BgWorker_DoWork;
BgWorker.ProgressChanged += BgWorker_ProgressChanged;
BgWorker.RunWorkerCompleted += BgWorker_RunWorkerCompleted;

其中DoWork是线程要执行的函数。

ProgressChanged 是进度更新时的回调函数

RunWorkerCompleted 是线程执行完成时的回调函数,这个函数里面可以直接调用UI线程的东西。

3、函数体实现:

void BgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    int progress = e.ProgressPercentage;

LabelProgress.Text = string.Format("完成{0}%", progress);
    LabelProgress.Left = (this.Width - LabelProgress.Width) / 2;
}

void BgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (PictureList.Count > 0)
    {
        ShowPicture(curIndex);
    }
    LabelProgress.Visible = false;
}

void BgWorker_DoWork(object sender, DoWorkEventArgs e)
{
    List<string> picList = new List<string>();
    string[] extList = { ".jpg", ".png" };
    int index = 0;
    foreach (string item in fileList)
    {
        if (extList.Contains(System.IO.Path.GetExtension(item).ToLower()) == true)
        {
            string backName = AddImageToDB(item);
            Debug.WriteLine("ImageName:" + backName);
            if (string.IsNullOrEmpty(backName) == false)
                picList.Add(backName);
        }
        index++;
        BgWorker.ReportProgress(100 * index / fileList.Count);
    }
    curIndex = PictureList.Count;
    PictureList.AddRange(picList);
}

时间: 2024-11-05 16:00:16

C#使用后台进程的相关文章

Jenkins任务启动的后台进程被自动kill

在Jenkins的使用中,遇到过的一个场景是:在web代码更改之后,能自动的部署到测试服务器,我们写了run.sh脚本来重启服务,在使用Jenkins的任务自动跑这个脚本后发现,服务没有起来.开始以为是run.sh脚本的问题,但是直接执行是没有问题的:之后一直查运行环境差异,发现也不是这个原因:到后来才怀疑到Jenkins任务结束时候自动关掉了所有的子进程.通过以下shell脚本片段解决了问题: #临时改变BUILD_ID值,使得Jenkins不会找到并结束掉run.sh启动的后台进程OLD_B

Linux运行与控制后台进程的方法:nohup, setsid, &amp;, disown, screen

Linux运行与控制后台进程的方法:nohup, setsid, &, disown, screen 转自http://heylinux.com/archives/1282.html#more-1282 我们经常会碰到这样的问题,用ssh登录了远程的Linux服务器,运行了一些耗时较长的任务,结果却由于网络等的不稳定导致任务中途失败.这是由于在用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程.解决办法有两种:让进程忽略HUP信号,或让进程运行在新

学习oracle数据库引航二——后台进程

from 谭怀远--数据库领航 后台进程 一.system monitor(SMON) (非正常关闭后的)实例恢复 二.process monitor(PMON) 回滚事务 释放锁及其它资源 重启死掉的调度器.(在共享服务器中用).分配用户连到哪个服务器上. 在监听器中注册服务信息 三.DBWn和LGWR DBWRn下写入磁盘文件 四.check point(CKPT) 喊DBWn写脏数据 完后会更新DATAFILE的HEADER和控制文件的HEADER.而HEADER中有同步所需要的信息,即C

CLUSTER三大后台进程和OCSSD、OPROCD进程

CSS(Cluster synchronizationservice) 这个服务通过管理集群中的节点成员身份完成整个集群的配置工作,每当有新的节点加入到集群,或者有节点离开时,CSS服务负责通知集群的所有节点变更集群配置信息.如果某个节点上的整个进程失败,就会重启这个节点,这个进程是以root身份运行. CRS(clusterready service) 这个组件负责集群的高可用性.被CRS管理的对象叫做集群资源.这些资源包括数据库.实例.监听.VIP地址以及应用程序进程.缺省情况下CRS管理着

后台进程小结

后台进程默认有15个. 1.master thread(1个). 2.IO thread (1)read/write thread(8个,默认各4个) (2)insert buffer thread(1个) (3)log io thread(1个) 3.lock monitor thread(1个) 4.error monitor thread(1个) 5.purge thread(1个) 6.purge cleaner(flushing) thread(1个) 7.MySQL 5.6起,mas

Oracle后台进程

后台进程 为了实现为多用户提供服务且保证系统性能,在一个多进程 Oracle 系统(multiprocess Oracle system)中,存在多个被称为后台进程(background process)的 Oracle 进程. 一个 Oracle 实例中可以包含多种后台进程,这些进程不一定全部出现在实例中.系统中运行的后台进程数量众多,用户可以通过V$BGPROCESS 视图查询关于后台进程的信息.Oracle 实例中可能运行的后台进程有: ·数据写入进程(DBWn) ·日志写入进程(LGWR

OCP第三章:数据库后台进程

SMON系统监控进程 作用:实例的恢复 --> 1.前滚所有重做日志中的改变 2.打开数据库为了用户能够访问 3.回滚没有提交的事物 --> 实例恢复不需要DBA操作,由oracle自动完成 --> 在执行startup force命令后,会进行实例恢复操作 --> 相关命令: alter database archivelog; shutdown mount shutdown immediate startup mount --> 遇到报错:ERROR at line 1:

后台进程和后台任务

在构建一个高性能可伸缩的 Web 应用的时候,你可以使用后台任务将一些耗时的操作从 HTTP 请求的处理中分解出来,放到后台进程中去异步执行.大部分的 Web 请求应该在 500ms 内完成,如果你发现你的应用有大于这个甚至有花费一两秒才能完成的请求,那么这个时候你应该考虑使用使用后台任务,将这些耗时的请求放到后台进程中去执行. 比如:发送邮件.读取比较慢的 API 接口.上传数据到云存储中,这些任务都应该放到后台任务中去执行,前端的 Web 进程应该添加完后台任务后立刻回复客户端,然后客户端可

说一下linux中shell的后台进程与前台进程

环境: 操作系统:archlinux; 终端模拟器:rxvt-unicode(urxvt); shell:bash; 这里所说的后台进程是指在命令行后面加一个 ampersand(&),前台进程就是不加ampersand的后台进程的命令行的形式. 1.当我们开启urxvt之后,终端模拟器会启动bash作为自己的子进程,然后bash会在urxvt中显示命令提示符等待用户的输入. 2.当我们输入命令之后,由bash负责解释命令. 3.当bash找到对应的命令之后(没研究过bash的源码,不知道如果没

Linux后台进程管理的一些命令小结

Linux后台进程管理的一些命令:fg.bg.jobs.&.ctrl + z命令,供大家学习参考 一. &加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &, 二.ctrl + z可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行 三.jobs查看当前有多少在后台运行的命令jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell