• 用户需求:定时抓取ERP系统条码已扫描未审核单据 ...由于线程调用方法不支持控件处理模式,故采用委托方法实现。 bool bStop; public DataTable dt = new DataTable(); public ScanedNotChecked_Frm()
    用户需求:定时抓取ERP系统条码已扫描未审核单据
    

    解决办法:
    由于采用Timer控件会消耗系统资源,故采用线程处理。
    由于线程调用方法不支持控件处理模式,故采用委托方法实现。

           bool bStop;
            public DataTable dt = new DataTable();
            public ScanedNotChecked_Frm()
            {
                InitializeComponent();
            }
    
            private void ScanedNotChecked_Frm_Load(object sender, EventArgs e)
            {
               //定义线程   
                Thread LogThread = new Thread(new ThreadStart(DoService));
                //设置线程为后台线程,那样进程里就不会有未关闭的程序了
                LogThread.IsBackground = true;
                bStop = true;
                if (bStop == true)
                {
                    Control.PageControl.CheckForIllegalCrossThreadCalls = false;
                    LogThread.Start();//起线程
    
                }                
            }
            private string  GetList() 
            {
                SqlParameter[] parms = new SqlParameter[0];
                DBCon db = new DBCon("ZM");
                gdScanedNotChecked.DataSource = SqlHelper.ExecuteDataset(db.StringConnection(), CommandType.StoredProcedure, "DZ_ScanedNotChecked", parms).Tables[0];
    
                return "重载";
            }
            int i = 0;
            private void DoService()
            {
                while (true)
                {
                    bStop = false;
                    //别的线程里的调用哇~
                    i++;
                    lblMessage.Text = "第" + i.ToString() + "次" + returnList(returnMylist) + "数据";
                    System.Threading.Thread.Sleep(1000*60*5);
                }
            }
            private delegate string returnStrDelegate();
            //搞个最简单滴取值滴方法~
            private string returnMylist()
            {
                return GetList();
            }
    
            //判断一下是不是该用Invoke滴~,不是就直接返回~
            private string returnList(returnStrDelegate myDelegate)
            {
                if (this.InvokeRequired)
                {
                    return (string)this.Invoke(myDelegate);
                }
                else
                {
                    return myDelegate();
                }
            }

    这里写图片描述

    展开全文
  • asp.net(C#)里刷新页面的6中方法介绍,希望其中有一种方法适合的需求。
  • C#winform界面刷新

    2016-05-30 14:08:07
    本文要实现的功能,是使用C#语言自动刷新页面。这个功能使用Timer可以很容易地实现。这里需要实现的自动刷新功能,要求可以从指定的几种选项里自由设置自动刷新的时间间隔。 我实现的效果如下图,这个DEMO定时...

    本文要实现的功能,是使用C#语言自动刷新页面。这个功能使用Timer可以很容易地实现。这里需要实现的自动刷新功能,要求可以从指定的几种选项里自由设置自动刷新的时间间隔。

    我实现的效果如下图,这个DEMO定时刷新的是中间Label内文字的字体。


    实现这一功能,要考虑到如下几个方面:

    1、这些选项最好可以在代码中以非常简便的方式添加,如构造一个函数,而不是在拉界面的时候手工添加,并逐一设置事件。如果手工添加事件,会造成每次增加或减少一个时间选项时,都要对其他所有选项的事件进行修改(至少各选项Checked属性的true和false会改)

    2、用一个计时器来进行刷新时,“不启用”这个选项比较特殊,该选项只需要关闭计时器即可,其他的时间间隔选项都是先把计时器停掉,修改时间间隔后再将计时器打开

    3、根据个人偏好(或业务需求),可以设定在每次变化自动刷新时间间隔后是否立即刷新一次,我的例子中,每次变化时间间隔后(选择“不启用”时除外),会立即刷新一次

    界面上的控件如下:


    窗体内代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace RefreshTimelyDemo
    {
        public partial class FormMain : Form
        {
            public FormMain()
            {
                InitializeComponent();
            }
    
            string[] font = new[] 
                { 
                    "宋体""仿宋""黑体""微软雅黑""幼圆""隶书""楷体",
                    "华文新魏""华文琥珀""华文行楷""华文彩云""方正姚体""方正舒体" 
                };
    
            /// <summary>
            /// 自动刷新时间间隔项
            /// </summary>
            LinkedList<ToolStripMenuItem> items = new LinkedList<ToolStripMenuItem>();
            /// <summary>
            /// 随机数种子
            /// </summary>
            Random random = new Random(DateTime.Now.Millisecond);
            /// <summary>
            /// 自动刷新计时器
            /// </summary>
            Timer timer = new Timer();
    
            private void Form1_Load(object sender, EventArgs e)
            {
                ToolStripMenuItem tsmiNone = new ToolStripMenuItem("不启用");
                tsmiNone.Click += (obj, arg) => 
                {
                    foreach (ToolStripMenuItem item in items)
                    {
                        item.Checked = 
                            item.GetHashCode() == tsmiNone.GetHashCode() ? true : false;
                    }
                    timer.Stop();
                };
                items.AddLast(tsmiNone);
                btnRefreshConfig.DropDownItems.Add(tsmiNone);
                btnRefreshConfig.DropDownItems.Add(new ToolStripSeparator());
                AddRefreshOption("500毫秒"500);
                AddRefreshOption("1秒"1000);
                AddRefreshOption("5秒"5000);
                btnRefreshConfig.DropDownItems.Add(new ToolStripSeparator());
                AddRefreshOption("1分钟"60000);
                AddRefreshOption("5分钟"300000);
                AddRefreshOption("30分钟"1800000);
    
                tsmiNone.Checked = true;
                timer.Tick += (obj, arg) =>
                {
                    RefreshFont();
                };
            }
    
            /// <summary>
            /// 更新数据
            /// </summary>
            private void RefreshFont()
            {
                int num = random.Next(0, font.Length);
                lblText.Font = new Font(font[num], lblText.Font.Size);
                lblFontName.Text = font[num];
            }
    
            /// <summary>
            /// 添加刷新项
            /// </summary>
            /// <param name="text"></param>
            /// <param name="interval"></param>
            private void AddRefreshOption(string text, int interval)
            {
                ToolStripMenuItem tempItem = new ToolStripMenuItem(text);
                tempItem.Click += (obj, arg) =>
                {
                    foreach (ToolStripMenuItem item in items)
                    {
                        item.Checked = 
                            item.GetHashCode() == tempItem.GetHashCode() ? true : false;
                    }
                    timer.Stop();
                    timer.Interval = interval;
                    RefreshFont();
                    timer.Start();
                };
                items.AddLast(tempItem);
                btnRefreshConfig.DropDownItems.Add(tempItem);
            }
    
            /// <summary>
            /// 手动刷新
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnRefresh_Click(object sender, EventArgs e)
            {
                RefreshFont();
            }
    
            /// <summary>
            /// 窗口退出前关闭计时器
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
            {
                timer.Stop();
            }
        }
    }
    展开全文
  • C#刷新父窗体

    2016-07-14 23:39:10
    C#开发基于winform的桌面应用程序中,时常会涉及到一些管理某些实体的业务,其中,这个“管理”就包括“增删改查”,在这些操作中,除了“查询”操作意外,另外的三个操作在执行完相应的“业务管理代码”之后,...

    C# 刷新父窗体

        在C#开发基于winform的桌面应用程序中,时常会涉及到一些管理某些实体的业务,其中,这个“管理”就包括“增删改查”,在这些操作中,除了“查询”操作意外,另外的三个操作在执行完相应的“业务管理代码”之后,需要刷新初始化加载的窗体,目的是为了“立即查看刚刚进行更新的数据”

        下面,我以我自主开发的“企业工资管理系统”为例(我这个管理系统是我自主开发的,可以作为大学生毕业设计的系统,有兴趣的博文可以加我QQ:1974544863向我索取,我可以低价出售给你,加我QQ时候记得备注为:“桌面应用系统”),介绍一下在“添加员工”管理这一小模块中,在添加完员工信息之后刷新“父窗体”,即“员工管理初始化加载窗体”。

         下面是初始化加载时候“员工管理窗体”,这一个即为“父窗体



        在上面,我们输入“陈”用于查询一下有没有数据,待会我们添加一个员工叫“陈伟霆”。

        其实,“刷新父窗体”的要点主要有两个:

    1,在“添加员工”这一事件开启,“新窗体”show之后的代码中“标记一下DialogResult.OK”是否成立,如果是就刷新当前的父窗体

    2,在“添加操作”这一业务完全执行成功,准备关闭“这一窗体”之时,立马标记一下“DialogResult”的状态为OK。

        下面是“添加员工”事件的代码:

            //添加员工
            private void buttonAdd_Click(object sender, EventArgs e)
            {
                frmAddEmployee addEmploye = new frmAddEmployee();
                addEmploye.ShowDialog();
    
                <span style="color:#ff0000;">//为了刷新父窗体
                if (addEmploye.DialogResult == DialogResult.OK)
                {
                    this.frmEmployee_Load(sender, e);
                }</span>
            }

         下面是执行“添加员工窗体中的保存员工操作成功之后”标记DialogResult的状态

            //保存员工信息
            private void buttonSave_Click(object sender, EventArgs e)
            {
                try
                {
                    /*这里是一系列的保存员工操作的业务处理代码*/
    
                    String strInsertSQL = "insert into tb_employee(loginName,loginPassword,loginKey,powerId,empName,age,sex,partID,idCardNo,jobType,jobDate,imagePosition,memo) values('" + empLoginName + "','" + loginPasswordEncrypt + "','" + loginKeyEncrypt + "','" + empPowerId + "','" + empName + "','" + empAge + "','" + empSex + "','" + empPartId + "','" + empCardNo + "','" + empJobType + "','" + empJobDate + "','" + empImageName + "','" + empMemo + "')";
                    employeeService.saveOrUpdatePart(strInsertSQL);
                    //记录添加员工已经成功 用于刷新父窗体
                    <span style="color:#ff0000;">this.DialogResult = DialogResult.OK;</span>
                    MessageBox.Show("成功保存新增员工信息!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("保存员工信息发生异常!\n"+ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }

         下面是效果演示:

    首先是添加员工“陈伟霆”


         然后,点击“保存”,


        提示保存成功,可以在最后一页查到:


         或者输入“陈”也可以查询:


        好了,本博文就介绍到这里,睡觉!!









































    展开全文
  • 本文要实现的功能,是使用C#语言自动刷新页面。这个功能使用Timer可以很容易地实现。这里需要实现的自动刷新功能,要求可以从指定的几种选项里自由设置自动刷新的时间间隔。 我实现的效果如下图,这个DEMO定时刷新...

    本文要实现的功能,是使用C#语言自动刷新页面。这个功能使用Timer可以很容易地实现。这里需要实现的自动刷新功能,要求可以从指定的几种选项里自由设置自动刷新的时间间隔。

    我实现的效果如下图,这个DEMO定时刷新的是中间Label内文字的字体。

    215401_EGTJ_1425762.png

    实现这一功能,要考虑到如下几个方面:

    1、这些选项最好可以在代码中以非常简便的方式添加,如构造一个函数,而不是在拉界面的时候手工添加,并逐一设置事件。如果手工添加事件,会造成每次增加或减少一个时间选项时,都要对其他所有选项的事件进行修改(至少各选项Checked属性的true和false会改)

    2、用一个计时器来进行刷新时,“不启用”这个选项比较特殊,该选项只需要关闭计时器即可,其他的时间间隔选项都是先把计时器停掉,修改时间间隔后再将计时器打开

    3、根据个人偏好(或业务需求),可以设定在每次变化自动刷新时间间隔后是否立即刷新一次,我的例子中,每次变化时间间隔后(选择“不启用”时除外),会立即刷新一次

    界面上的控件如下:

    221013_FQqW_1425762.png

    窗体内代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace RefreshTimelyDemo
    {
        public partial class FormMain : Form
        {
            public FormMain()
            {
                InitializeComponent();
            }
    
            string[] font = new[] 
                { 
                    "宋体", "仿宋", "黑体", "微软雅黑", "幼圆", "隶书", "楷体",
                    "华文新魏", "华文琥珀", "华文行楷", "华文彩云", "方正姚体", "方正舒体" 
                };
    
            /// <summary>
            /// 自动刷新时间间隔项
            /// </summary>
            LinkedList<ToolStripMenuItem> items = new LinkedList<ToolStripMenuItem>();
            /// <summary>
            /// 随机数种子
            /// </summary>
            Random random = new Random(DateTime.Now.Millisecond);
            /// <summary>
            /// 自动刷新计时器
            /// </summary>
            Timer timer = new Timer();
    
            private void Form1_Load(object sender, EventArgs e)
            {
                ToolStripMenuItem tsmiNone = new ToolStripMenuItem("不启用");
                tsmiNone.Click += (obj, arg) => 
                {
                    foreach (ToolStripMenuItem item in items)
                    {
                        item.Checked = 
                            item.GetHashCode() == tsmiNone.GetHashCode() ? true : false;
                    }
                    timer.Stop();
                };
                items.AddLast(tsmiNone);
                btnRefreshConfig.DropDownItems.Add(tsmiNone);
                btnRefreshConfig.DropDownItems.Add(new ToolStripSeparator());
                AddRefreshOption("500毫秒", 500);
                AddRefreshOption("1秒", 1000);
                AddRefreshOption("5秒", 5000);
                btnRefreshConfig.DropDownItems.Add(new ToolStripSeparator());
                AddRefreshOption("1分钟", 60000);
                AddRefreshOption("5分钟", 300000);
                AddRefreshOption("30分钟", 1800000);
    
                tsmiNone.Checked = true;
                timer.Tick += (obj, arg) =>
                {
                    RefreshFont();
                };
            }
    
            /// <summary>
            /// 更新数据
            /// </summary>
            private void RefreshFont()
            {
                int num = random.Next(0, font.Length);
                lblText.Font = new Font(font[num], lblText.Font.Size);
                lblFontName.Text = font[num];
            }
    
            /// <summary>
            /// 添加刷新项
            /// </summary>
            /// <param name="text"></param>
            /// <param name="interval"></param>
            private void AddRefreshOption(string text, int interval)
            {
                ToolStripMenuItem tempItem = new ToolStripMenuItem(text);
                tempItem.Click += (obj, arg) =>
                {
                    foreach (ToolStripMenuItem item in items)
                    {
                        item.Checked = 
                            item.GetHashCode() == tempItem.GetHashCode() ? true : false;
                    }
                    timer.Stop();
                    timer.Interval = interval;
                    RefreshFont();
                    timer.Start();
                };
                items.AddLast(tempItem);
                btnRefreshConfig.DropDownItems.Add(tempItem);
            }
    
            /// <summary>
            /// 手动刷新
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnRefresh_Click(object sender, EventArgs e)
            {
                RefreshFont();
            }
    
            /// <summary>
            /// 窗口退出前关闭计时器
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
            {
                timer.Stop();
            }
        }
    }

    END

    转载于:https://my.oschina.net/Tsybius2014/blog/546995

    展开全文
  • 为了动态刷新数据我们使用定时器来实现 2.页面中的处理 1.拖入ScriptManager; 2.拖入UpdatePanel 3.再加入一个定时器 Timer,设置Interval为5秒(5000) 4.加一个数据控件,根据需要GridView或DataList等等,连接数据....

    1.实现的功能

    因为订单只有在二维码失效后才可以取消订单,所以取消订单按钮的显示需要动态获取订单的状态来进行实时的改变。
    为了动态刷新数据我们使用定时器来实现
    在这里插入图片描述

    2.页面中的处理

    1.拖入ScriptManager;
    2.拖入UpdatePanel
    3.再加入一个定时器 Timer,设置Interval为5秒(5000)
    4.加一个数据控件,根据需要GridView或DataList等等,连接数据库
    5. 设置UpdatePanel为有条件异步更新
    6.在Timer的Tick事件中打入代码
    protected void Timer1_Tick(object sender, EventArgs e)
    {
    改变数据的代码(在后面实现)
    }

    III)页面代码:

    <asp:ScriptManager ID="ScriptManager1" runat="server">
      </asp:ScriptManager>
      <asp:UpdatePanel ID="UpdatePanel1" runat="server">
      <ContentTemplate>
      <%= DateTime.Now.ToString() %>
      <!--GridView控件在后台进行绑定--->
      <asp:GridView ID="GridView1" runat="server">
       <a class="btn danger" id='<%#Eval("codeId") %>' style='<%#Eval("expire").Equals("True")?"":"display:none"%>'>取消订单</a>
      </asp:GridView>
      <!--定时器每5秒钟刷新一次UpdatePanel中的数据-->
      <asp:Timer ID="Timer1" runat="server" Interval="5000" ontick="Timer1_Tick">
      </asp:Timer>
      </ContentTemplate>
      <Triggers>
      <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick"></asp:AsyncPostBackTrigger>
      </Triggers>
      </asp:UpdatePanel>
    

    expire字段控制取消订单按钮是否显示

    3.后端逻辑

    protected void Timer1_Tick(object sender, EventArgs e)
          {   
              DateTime now = DateTime.Now;//获取当前日期
              if (dt!=null&&dt.Rows.Count != 0)//页面首次加载时获取到的数据表
              {
                  string strWhere = "payState = 0 and expireTime <'" + now.ToString() + "'";
                  DataRow[] drArr1 = dt.Select(strWhere);//筛选出未支付并且二维码已过期的订单数据
                  for (int i = 0; i < drArr1.Length; i++)//批量修改这些数据的状态
                  {
                      DataRow drArr = drArr1[i];
                      drArr.BeginEdit();
                      drArr["expire"] = true;//将二维码过期状态改为已过期
                      drArr.EndEdit();
                  }
                  UpdatePanel1.Update();
                  showOrdersGView.DataSource = dt;//将更新的数据再次绑定到gridview
                  showOrdersGView.DataBind();
              }
          }
    

    4.数据库的查询处理

    select DATEADD(n,45, createTime) as expireTime,'false' as expire from xxtable where xxx
    

    将二维码生成时间加上二维码有效期作为过期时间,默认给expire属性赋值为未过期

    展开全文
  • C#刷新页面的方式

    2019-07-04 21:38:27
    1、Response.Redirect( "NewsManager.aspx ...ispostback判断只有第一次加载才绑定数据时,会造成刷新之后不显示数据。 2、Response.Write( " <script> window.location= 'NewsManager.aspx ' </script&g...
  • 其实实现这个刷新,就是在数据操作完后,再进行一次数据查询的操作而已。 #endregion //新增用户 private void button3_Click(object sender, EventArgs e) { AddUser ad = new AddUser(); ad.ShowD...
  • I)现在刚开始学习C#,对一些基本的控件了解的不够,有个实时监控的系统,需要页面中的数据每5秒钟刷新一次, 要是每5秒钟页面全部的刷新,那页面根本就没法看了,对这个问题在CSDN上也专门开了帖子,问了各位高手...
  • 使用dataGridView控件在修改、删除、插入数据后,怎样刷新数据显示操作后的结果.同时在对数据操作时通常会判断数据的主键是否存在或重复,判断外键是否重复,这几个问题我推荐使用函数的形式完成,同时推荐一个操作格式,...
  • 近期做项目,遇到一个问题,
  • 本人c#新手,最近公司要求做的一个程序,需要利用后台定时查询数据绑定到datagridview上,要求程序不能出现假死,给人友好的体验,于是想到利用创建另一个线程用于查询数据然后再把数据显示在datagridview上。...
  • 通常往ListView不断写入数据时,会发现ListView上的数据存在抖动闪烁的问题。对于追求完美的强迫症晚期患者而言,这一点是无法容忍的。同时也带来不良的用户体验。 下面通过双缓冲的方法解决该问题。 1. 新建一个...
  • private BindingSource dataSource = new BindingSource();   private void Form_Load(object sender, EventArgs e) {  dataSource.DataSource = typeof(MyType);    Binding alias = new ...Binding(
  • 主窗体含有控件Button,DataGridView主窗体button按钮点击函数打开弹窗 private void add_Click(object sender, EventArgs e) { DictAdd form = new DictAdd(); form.cleareven();//去掉事件委托 ...
  • C#在主线程内进行大量任务运算并要求控件对此进行刷新响应时,有可能导致控制显示无法刷新,主要原因是讲大量任务与处于UI线程中的控件刷新写在了一起。例如,进行大规模运算时,如果要在Progress控件中显示运算进度...
  • 第一: private void Button1_Click( object sender, System.EventArgs e )  {  Response.Redirect( Request.Url.ToString( ) ); } 第二: private void Button2_Click( object sender, System.EventArgs e ) ...
1 2 3 4 5 ... 20
收藏数 23,136
精华内容 9,254