当前位置: 代码网 > it编程>编程语言>Asp.net > C# BackgroundWorker_DoWork和进度条progressBar1 绑定,逐行处理耗时任务

C# BackgroundWorker_DoWork和进度条progressBar1 绑定,逐行处理耗时任务

2024年08月02日 Asp.net 我要评论
【代码】C# BackgroundWorker_DoWork和进度条progressBar1 绑定,逐行处理耗时任务。
private backgroundworker backgroundworker;
private void usercontrolcodeoperation_load(object sender, eventargs e)
{
    initialization();//初始化
    checkboxoperation.enabled = false;
    checkboxcommand.enabled = false;
    // 初始化 backgroundworker
    backgroundworker = new backgroundworker
    {
        workerreportsprogress = true,
        workersupportscancellation = true
    };
    backgroundworker.dowork += backgroundworker_dowork;
    backgroundworker.progresschanged += backgroundworker_progresschanged;
    backgroundworker.runworkercompleted += backgroundworker_runworkercompleted;

}
int count = 100;
private void backgroundworker_dowork(object sender, doworkeventargs e)
{
    if (codelines.count > 0)
    {
        count = codelines.count;
    }
    // 模拟长时间操作
    for (int i = 0; i < count; i++)
    {
        if (backgroundworker.cancellationpending)
        {
            e.cancel = true;
            break;
        }

        // 更新进度
        backgroundworker.reportprogress(i, codelines[i]);
        //system.threading.thread.sleep(10); // 模拟操作时间
    }
}

private void startbackgroundwork()
{
    // 显示进度条
    progressbar1.visible = true;
    progressbar1.value = 0;
    loadimg.left = this.width / 2 - 38;
    loadimg.visible = true;

    string datetimenow = string.format("{0} {1} {2}", datetime.now, "startbackgroundwork", environment.newline);
    // 获取项目所在路径
    string dirpath = system.io.path.getdirectoryname(system.windows.forms.application.executablepath);
    string filename = string.format("log_{0:yyyymmdd}.log", datetime.now);
    string filepath = system.io.path.combine(dirpath, "log", filename);
    analysiscodeclass.codefile.writelog(filepath, datetimenow);

    // 启动后台工作
    if (!backgroundworker.isbusy)
    {
        backgroundworker.runworkerasync();
    }
}

private void backgroundworker_progresschanged(object sender, progresschangedeventargs e)
{
    console.write(e.progresspercentage);
    console.write(e.userstate);
    // 更新进度条
    if (e.progresspercentage * 100 / count > 100)
    {
        progressbar1.value = 100;
    }
    else
    {
        progressbar1.value = e.progresspercentage * 100 / count;
    }            
    string datetimenow = string.format("{0} {1} {2}", datetime.now, "", environment.newline);
    console.write(datetimenow);
    // 执行操作
    classcodestruct.codeline codeline = (classcodestruct.codeline)e.userstate;
    console.write(codeline.code);
    // 逐行处理,并渲染到界面
    displaycodelines(codeline, e.progresspercentage);
}

private void backgroundworker_runworkercompleted(object sender, runworkercompletedeventargs e)
{
    // 隐藏进度条
    progressbar1.visible = false;
    if (e.cancelled)
    {
        progressbar1.visible = false;
        messagebox.show("取消成功");
    }
    else if (e.error != null)
    {
        messagebox.show("执行出错 " + e.error);
    }
    else
    {
        var res = e.result;
        progressbar1.value = 100;
        progressbar1.visible = false;
        loadimg.visible = false;
        setcombobox();
        //messagebox.show("操作完成 " + res);
        //messagebox.show("操作完成 " + datetime.now);
        string datetimenow = string.format("{0} {1} {2}", datetime.now, "backgroundworker_runworkercompleted", environment.newline);
        // 获取项目所在路径
        string dirpath = system.io.path.getdirectoryname(system.windows.forms.application.executablepath);
        string filename = string.format("log_{0:yyyymmdd}.log", datetime.now);
        string filepath = system.io.path.combine(dirpath,"log", filename);
        analysiscodeclass.codefile.writelog(filepath, datetimenow);
    }
}
        #region 写日志文件
        public static void writelog(string filename, string text)
        {
            //如果文件夹不存在,创建文件夹
            string path = path.getdirectoryname(filename);
            if (!system.io.directory.exists(path))
            {
                system.io.directory.createdirectory(path);
            }
            // 如果文件不存在则创建文件           
            //if (!system.io.file.exists(filename))
            //{
            //    filestream fs = system.io.file.create(filename);
            //    fs.close();
            //}
            //streamwriter sw = new streamwriter(filename, true);
            //sw.writeline(text);
            //sw.close();
            using (streamwriter sw = new streamwriter(filename, true))
            {
                sw.writeline(text);
            }
        }
        #endregion
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com