C# 多线程 — 从MES系统开发谈多线程

前段时间在开发MES系统(手机生产),里面有一个工序是装周转车,其实思路很简单,就是将每一个产品的SN号(唯一)和小车的SN号加个关联,标识这个SN现在装在这个小车里面。

因为工厂的操作大部分都是扫描枪进行操作的 ,

所以操作的顺序也就是这样: 扫描小车号(0001) 扫描产品SN号(000001,000002....)

车子的容量是120,在扫描完最后一个后, 数据库的操作是 新增120条记录。然后还有一个操作(120个产品过站,什么是过站,你不懂也没关系,你就知道 它是一个挺长的时间就好)

软件第一版没有利用多线程,我记得当时的速度 是过站时间 20S:这里不要骂我 说我软件写的很烂,逻辑有问题,数据访问有问题之类的,因为那不是我写的 ,

这里我们撇开逻辑代码和数据访问代码的优劣,因为我接到这个问题的时候第一反应 就是为毛不用多线程?

这里我们写一个很傻逼的方法,耗时很久的

             int valueresult = 0;
            for (int i = 0; i <= 2000; i++)
            {
                Thread.Sleep(50);
                valueresult++;
            }
            this.textBox1.Text = valueresult.ToString();

在运行这样耗时很久的方法时,页面都是这样的,不能进行任何操作,会假死在那里,显示未响应

 

  public delegate void SetvalueHandler(string str);
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Thread param = new Thread(() => Getsum()); 
            param.Start();//开启线程

        }
        public void Getsum()
        {
            int valueresult = 0;
            for (int i = 0; i <= 2000; i++)
            {
                Thread.Sleep(5);
                valueresult++;
            }
            //第一种
            //SetvalueHandler setvalue = new SetvalueHandler(Setvalue);
            //this.textBox1.Invoke(setvalue,valueresult.ToString());
            //第二种
            this.textBox1.Invoke(new MethodInvoker(() => Setvalue(valueresult.ToString())));
        }
        public void Setvalue(string str)
        {
            this.textBox1.Text = str;
        }
    }

在看下修改后的代码,加入了多线程 再进行计算的时候 ,界面不会出现假死,输入框也是可以输入值的,当计算结束后,窗体文本框就有值了,

再来说上面的问题,我们说 一个车子装120个产品 的处理时间是20S,那么我们扫描小车,再扫描一百二十个产品的时间呢? 别告诉我是几秒钟,

那我们是不是可以 在它扫入最后一个产品的时候,开启一个线程,让他自己去写数据库,这时候你前台界面再继续扫描另外的小车河产品?

 

 

 

 

 

转载于:https://www.cnblogs.com/yuanaibeilei/p/3287650.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值