C# winform 异步提示

moqijunnu 2015-08-18 10:18:23
我正在做一个数据转移的小系统

当点击转移的时候,根据下拉列表选择的 业务名称 转移不同是数据
假设选择“售后数据” 里面会执行 下面5个不同方法
① 转移“配件大类”
②转移“配件单位”
③转移“颜色字典”
④转移“配件信息”
⑤转移“售后销售单据信息”
因为数据量比较大, 3个月 所有的单据、配件等信息有200W左右,并且相关联的表比较多,所以速度很慢
所以我想做成这样的,有ProgressBar 进度条,并且在下面的Textbox里面进行提示 当前正在操作的方法
类似于:
........
正在转移"配件大类"
"配件大类"转移完成
正在转移“配件单位”
“配件单位”转移完成
正在转移“颜色字典”
“颜色字典”转移完成
正在转移“配件信息”
“配件信息”转移完成

需要这样的提示,想问怎么操作,因为没有做过winform、也没有接触过异步,不知道这属不属于异步
希望各位大大给个方案。
...全文
398 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
moqijunnu 2015-08-18
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
1. 创建一个新的Thread来运行①~⑤的方法,Thread也可以选用BackgroundWorker,ThreadPool代替 2. Form中增加一些更新Progress以及显示Text的方法 3. 在1的方法中使用Form.Invoke方法来调用2中增加的方法
BackgroundWorker 我查了一下资料,但是具体的怎么在BackgroundWorker使用①-⑤的方法呢? 不好意识 真不了解这一块的知识,并且项目时间很短 ,能不能再详细点呢, 谢谢
道玄希言 2015-08-18
  • 打赏
  • 举报
回复
也可以用事件委托
Poopaye 2015-08-18
  • 打赏
  • 举报
回复
1. 创建一个新的Thread来运行①~⑤的方法,Thread也可以选用BackgroundWorker,ThreadPool代替 2. Form中增加一些更新Progress以及显示Text的方法 3. 在1的方法中使用Form.Invoke方法来调用2中增加的方法
moqijunnu 2015-08-18
  • 打赏
  • 举报
回复
引用 11 楼 shingoscar 的回复:
[quote=引用 7 楼 moqijunnu 的回复:] 这里怎么执行 那两个方法呢?
直接调用函数啊[/quote] 怎么调用啊?谁调用谁? 5个方法 结束 进度条也要结束的 我真的对这方面是小白 什么都不会的。winform 我都第一次做的。
Poopaye 2015-08-18
  • 打赏
  • 举报
回复
引用 7 楼 moqijunnu 的回复:
这里怎么执行 那两个方法呢?
直接调用函数啊
moqijunnu 2015-08-18
  • 打赏
  • 举报
回复
引用 9 楼 ystemni 的回复:
工作线程处理事情, 然后委托主线程更新界面
哥 现在没有时间啊,以前没有研究过 线程 委托,所以不知道怎么操作,要去查资料 时间就不够了,能不能具体的说说啊
ystemni 2015-08-18
  • 打赏
  • 举报
回复
工作线程处理事情, 然后委托主线程更新界面
moqijunnu 2015-08-18
  • 打赏
  • 举报
回复

    private int work(BackgroundWorker bk, DoWorkEventArgs e)
        {
            //ThreadPool.QueueUserWorkItem();
            int maxRecords = (int)e.Argument;
            int percent = 0;

           // string materials_str = 方法①
            //string after_str =方法②

            for (int i = 0; i < maxRecords; i++)
            {
                percent = (int)(((double)i / (double)maxRecords) * 100);          
                 bk.ReportProgress(percent, "配件信息转移完成");
                 Thread.Sleep(100);

            }
            return maxRecords;
        }
moqijunnu 2015-08-18
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
[code=csharp]ThreadPool.QueueUserWorkItem(YOUR_METHOD); void YOUR_METHOD(object state) { //①转移“配件大类” //②转移“配件单位” //③转移“颜色字典” //④转移“配件信息” //⑤转移“售后销售单据信息” }
private int work(BackgroundWorker bk, DoWorkEventArgs e) { //ThreadPool.QueueUserWorkItem(); int maxRecords = (int)e.Argument; int percent = 0; // string materials_str = 方法① //string after_str =方法② for (int i = 0; i < maxRecords; i++) { percent = (int)(((double)i / (double)maxRecords) * 100); bk.ReportProgress(percent, "配件信息转移完成"); Thread.Sleep(100); } return maxRecords; }[/code] 这里怎么执行 那两个方法呢?
忘丿殇 2015-08-18
  • 打赏
  • 举报
回复
这个是线程和UI的操作~
老李家的小二 2015-08-18
  • 打赏
  • 举报
回复
楼主可以参考一下 http://blog.163.com/china__xuhua/blog/static/199723169201231735439614/
Poopaye 2015-08-18
  • 打赏
  • 举报
回复
ThreadPool.QueueUserWorkItem(YOUR_METHOD);

void YOUR_METHOD(object state) {
    //①转移“配件大类”
    //②转移“配件单位”
    //③转移“颜色字典”
    //④转移“配件信息”
    //⑤转移“售后销售单据信息”
}

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧