多线程操作--模拟二维码的扫描以及定期存储

这篇博客介绍了如何使用多线程技术模拟二维码扫描,并实现数据的定期存储到数据库中。通过遍历数据并将其转化为字符串列表,然后更新数据库,并确保线程安全。最后,检查并终止相关线程。
摘要由CSDN通过智能技术生成
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private Thread t1,t2;
        private static DataTable tdlData = new DataTable("Datas");
        private DataColumn dc = tdlData.Columns.Add("ProductId", Type.GetType("System.String"));
        private List<string> ProductName;
        private bool flag = false;

        private static string RowName;

        //获取数据源
        public void GetData()
        {

            DataRow newRow = tdlData.NewRow();
            if (!string.IsNullOrEmpty(RowName))
            {
                newRow["ProductId"] = RowName;
                tdlData.Rows.Add(newRow);//将每条记录插入到临时表
            }

            
            //模拟的时候可以设定每有5条数据的时候,传递一次参数
            //但是实际应用的时候应该怎么办呢?          
            if (tdlData.Rows.Count == 5)
            {
                flag = true;
               // tdlData.Reset();
            }

            MessageBox.Show("临时表记录条数" + tdlData.Rows.Count);

        }

        public void ToList()
        {            

  mut.WaitOne();             //Monitor.Enter(this);             //lock (this)             //{                 if (flag)                 {                     ProductName = new List<string>();

                    for (int i = 0; i < tdlData.Rows.Count; i++)                     {                         ProductName.Add(tdlData.Rows[i].ItemArray[0].ToString());                     }                     MessageBox.Show("存入数据库的数据条数" + ProductName.Count.ToString());

                    flag = false;                     tdlData.Rows.Clear();                 }

            //}             //Monitor.Exit(this);             mut.ReleaseMutex();

} private void Form1_FormClosing(object sender, FormClosingEventArgs e) {

  if (t1.IsAlive)             {                 t1.Abort();             }

            if (t2.IsAlive)             {                 t2.Abort();             }

} private void Form1_Activated(object sender, EventArgs e) { this.txtInput.Focus(); } private void txtInput_KeyUp(object sender, KeyEventArgs e) { if (this.txtInput.Text.Length == 5) { this.txtInput.Focus(); this.listBox1.Items.Add(txtInput.Text.Trim()); RowName = txtInput.Text.Trim(); t1 = new Thread(new ThreadStart(this.GetData)); t1.Start(); t2 = new Thread(new ThreadStart(this.ToList)); t2.Start(); } else if (txtInput.Text.Length > 5) { this.txtInput.Clear(); } } }

 

注:这个程序模拟没有问题,但是实际操作的时候该怎么办呢?

        实际操作的时候不可能定义一个数字,每当扫描一定数量的时候就把数据搞到DataTable中,

        比如说,设定1000个,但是今天就生产了10001个,前10000个当然没有问题,插入数据库什么的都没事,

        但是剩下的那一个该怎么处理?

        所以说,定义一个具体数字是不切合实际的,征求想法!!!!

        如果你有更好的想法,请留言或者联系本人,不甚感激!

        QQ:834217941半部論語

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值