关于c# winform 中 使用多线程实现后台定时刷新 datagridview 数据

背景

本人c#新手,最近公司要求做的一个程序,需要利用后台定时查询数据绑定到datagridview上,要求程序不能出现假死,给人友好的体验,于是想到利用创建另一个线程用于查询数据然后再把数据显示在datagridview上。程序完成的时候,在本机上代码调试也没出问题,很完美,但是到了实际的运用的时候,datagridview的界面出了问题,没有数据并且显示一个大红叉,并且还报错。之前还以为是电脑环境的问题,到后来才找到原因,是多线程使用不当的问题。下面是小弟的解决方法,目前已经没有发现这个情况。如果有人发现此方法不适用或者有更好的方法,请告知,谢谢!欢迎各位大神指导!

实现代码


        /// <summary>
        /// 查找数据(查询调用函数)
        /// </summary>
        private void searchData()
        {  

            //开始查询数据
            Thread th = new Thread(new ThreadStart(StartSearchData));
            th.IsBackground = true;//设置为后台线程,否则即使主程序界面关闭了,程序也不会真正关闭,子线程会继续执行下去
            th.Start();
        }


        bool IsReflash = false;//控制下面while 循环,实现定时刷新的效果,如果在查询开始的时候需要设置为true,如果不需要定时查询了,设置为false就好
        private delegate void InvokeHandler();//使用代理让主线程去处理控件数据
        /// <summary>
        ///开始查询数据库的数据
        /// </summary>
        private void StartSearchData()
        {
            try
            {

                while (IsReflash)
                {
                    DataTable dt = new DataTable();
                    dt = GetInfo.getCLC_SO_Info();
                    if (this.IsHandleCreated)//判断句柄是否被创建,创建之后才能使用 Invoke或 BeginInvoke
                    {
                        this.Invoke(new InvokeHandler(delegate()
                        {
                            dgv_Main.DataSource = dt;
                        }));
                    }
                    Thread.Sleep(5000);//设置刷新时长
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

 

  • 3
    点赞
  • 25
    收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 3

打赏作者

CJHBDGB

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值