zoukankan      html  css  js  c++  java
  • 条码打印异步调用

           做了将近一年的进销存软件产品,今天无意中发现了一个对象

    BackgroundWorker

     后台线程处理,觉得挺管用,所以做了一个很小的Demo(条码打印),界面给人一种很真实的感觉,好,切入正题,

    所以我们来看看效果图:

     好,相信现在大家都已经看到了这种效果图了,好,我们看看代码的实现:

    首先: 我们搭建一个业务逻辑层,类名为:ParamUtil

    我们看看代码:

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    namespace Action
    {
    public class ParamUtil
    {
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="cmd"></param>
    public ParamUtil(string cmd)
    {

    }

    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="cmd"></param>
    public ParamUtil()
    {

    }

    /// <summary>
    /// 初始化数据
    /// </summary>
    public DataTable CBind1()
    {
    DataTable dt
    = new DataTable();

    dt.Columns.Add(
    "a",typeof(string));
    dt.Columns.Add(
    "b",typeof(string));
    dt.Columns.Add(
    "c",typeof(string));

    //造数据
    for (int i = 0; i < 100;++i )
    {
    DataRow dr
    = dt.NewRow();
    dr[
    "a"] = "颜色";
    dr[
    "b"] = "尺码";
    dr[
    "c"] = "未打印";
    dt.Rows.Add(dr);
    }

    return dt;
    }
    }

    }

    好,现在我们的业务逻辑层已经搭建好,我们来看客户端的实现:

    代码
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Action;

    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    #region 设计说明
    #endregion

    #region 变动记录
    //Ver 1.0.0.1 (2010-11-29) Andy20101987 初始化数据
    #endregion

    #region 变量

    /// <summary>
    /// 后台线程
    /// </summary>
    private BackgroundWorker bgw;

    /// <summary>
    /// 设置datagridview第一行的索引值
    /// </summary>
    /// <param name="rowindex"></param>
    private delegate void ChangeDGVFirstDisplayedScrolling(int rowindex);

    #endregion

    #region 框架方法
    /// <summary>
    /// 窗体加载事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Form1_Load(object sender, EventArgs e)
    {
    // 实例化
    Action.ParamUtil paramutil = new ParamUtil();

    DataTable dt
    = new DataTable();
    dt
    =paramutil.CBind1();

    this.bindingSource1.DataMember = dt.TableName;
    this.bindingSource1.DataSource = dt;

    this.toolStripProgressBar1.Maximum = bindingSource1.Count;
    }

    #endregion

    #region 成员方法

    /// <summary>
    /// 打印
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnPrint_Click(object sender, EventArgs e)
    {
    this.toolStripStatusLabel1.Text = "正在打印...";

    bgw
    = new BackgroundWorker();
    bgw.WorkerReportsProgress
    = true;
    bgw.WorkerSupportsCancellation
    = true;
    bgw.DoWork
    += new DoWorkEventHandler(bgw_DoWork);
    bgw.ProgressChanged
    += new ProgressChangedEventHandler(bgw_ProgressChanged);
    bgw.RunWorkerCompleted
    += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);

    bgw.RunWorkerAsync();
    }

    #endregion

    #region 事件

    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void bgw_DoWork(object sender, DoWorkEventArgs e)
    {
    bindingSource1.MoveFirst();
    int rowPosition = bindingSource1.Position;

    while (rowPosition <= bindingSource1.Count)
    {
    if (bgw.CancellationPending)
    break;

    this.dataGridView1.Rows[bindingSource1.Position].Selected = true;
    DataRowView currentRowView
    = bindingSource1.Current as DataRowView;
    currentRowView.Row[
    "c"] = "正在打印...";

    System.Threading.Thread.Sleep(
    1000);
    currentRowView.Row[
    "c"] = "打印完成!";

    this.dataGridView1.Rows[rowPosition].DefaultCellStyle.ForeColor = Color.Red;

    if (bindingSource1.Position > 6)
    {
    bgw.ReportProgress(bindingSource1.Position
    - 6);
    }
    else
    {
    bgw.ReportProgress(
    0);
    }

    bindingSource1.MoveNext();
    rowPosition
    ++;
    }

    bgw.Dispose();
    }

    /// <summary>
    /// 停止
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnStop_Click(object sender, EventArgs e)
    {
    this.toolStripStatusLabel1.Text = "取消打印!";
    this.toolStripProgressBar1.Value = 0;

    bgw.CancelAsync();
    bgw.Dispose();
    }

    /// <summary>
    /// 退出
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnExit_Click(object sender, EventArgs e)
    {
    Close();
    }

    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
    dataGridView1.FirstDisplayedScrollingRowIndex
    = e.ProgressPercentage;
    dataGridView1.Refresh();

    if (this.toolStripProgressBar1.Value.Equals(bindingSource1.Count))
    {
    toolStripProgressBar1.Value
    = bindingSource1.Count;
    }
    else
    {
    toolStripProgressBar1.Value
    ++;
    }
    }

    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    this.toolStripStatusLabel1.Text = "打印完成!";
    }

    #endregion

    }
    }

    好,现在客户端也组建好,就可以看到我们上面的效果图了,大家感觉试一试,希望对大家有所帮助,

    因为时间比较匆忙,今天就写在这,后期会对其进行更详细的述说,也会发表更多的文章,希望大家一起

    来学习。

    如需转载,但请注明文章来源和超链接等版权信息,谢谢合作!
  • 相关阅读:
    变色龙
    生在北极圈内的“瑞典之声”Sofia Jannok
    “清一色”数列1,11,111,1111,...
    1100 10100 PAGE ERROR
    The Lazarus Project
    数字“黑洞”495
    don't you forget the EXIF~!
    行和列
    小谈奇数平方与偶数平方
    “码农”的得力工具math
  • 原文地址:https://www.cnblogs.com/zhenlin/p/1891291.html
Copyright © 2011-2022 走看看