zoukankan      html  css  js  c++  java
  • c# 委托

    引用:http://xtuhuajx.blog.163.com/blog/static/25504754200851210120611/

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
    using System.Threading;
    using System.Data.SqlClient;

    namespace TestForm
    {
        public partial class Form1 : Form
        {
            //定义一个变量,用于关闭线程
            private bool flag;
            //定义一个线程
            private Thread thread;

            //定义一个委托
            public delegate void MyInvoke(DataSet ds);

            public Form1()
            {
                InitializeComponent();
                flag = true;
                thread = new Thread(new ThreadStart(threadProc));
                thread.Start();
            }

            //线程回调函数
            private void threadProc()
            {
                while (flag)
                {
                    //三秒种一次
                    DataBind();           
                    Thread.Sleep(3000);
                }
            }
            //操作DataGridView
            private void BindDataGridView(DataSet ds)
            {
                this.dataGridView1.DataSource = ds.Tables["student"];
            }
            //从数据库中取出数据,并绑定
            private void DataBind()
            {
                SqlConnection con = new SqlConnection("server=.;database=student;uid=sa;pwd=0421");
                try
                {
                    con.Open();
                    SqlDataAdapter sda = new SqlDataAdapter("select * from studentInfor", con);
                    DataSet ds = new DataSet();
                    sda.Fill(ds, "student");
                    //this.dataGridView1.DataSource = ds.Tables["student"];
                    //绑定数据到DataGridView
                    MyInvoke mi = new MyInvoke(BindDataGridView);
                    this.BeginInvoke(mi, new object[] { ds });
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    con.Close();
                }
            }

            private void button1_Click(object sender, EventArgs e)
            {
                //测试,添加一条数据,看隔一段时间后,能否取上来..
                SqlConnection con = new SqlConnection("server=.;database=student;uid=sa;pwd=0421");
                try
                {
                    con.Open();
                    SqlCommand cmd = new SqlCommand("insert into studentInforvalues('1111111','test')", con);
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    con.Close();
                }
            }

            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                //关闭前先关闭线程
                flag = false;
                thread.Join();
            }


        }
    }

    【liujia_0421】:
    TO:测试那个线程的方法出现这样的错误:
            线程间操作无效: 从不是创建控件“dataGridView1”的线程访问它。

    不好意思,开始没想这么多,确实不能在线程中操作控件的,但有时测试是可以通过的,虽然测试通过了,但没有检查...

    现在改过了,利用委托,与前面的代码,改的地方有三:

    1.//定义一个委托
            public delegate void MyInvoke(DataSet ds);


    2.写了一个专门操作DataGridView的函数
    //操作DataGridView
            private void BindDataGridView(DataSet ds)
            {
                this.dataGridView1.DataSource = ds.Tables["student"];
            }


    3.在DataBind函数中将操作DataGridView的代码改用委托来实现:
    //***********注意这句被注释起来了**********************//
    //this.dataGridView1.DataSource = ds.Tables["student"];
    //*************************************

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    leetcode 213. 打家劫舍 II JAVA
    leetcode 48. 旋转图像 java
    leetcode 45. 跳跃游戏 II JAVA
    leetcode 42. 接雨水 JAVA
    40. 组合总和 II leetcode JAVA
    24. 两两交换链表中的节点 leetcode
    1002. 查找常用字符 leecode
    leetcode 23. 合并K个排序链表 JAVA
  • 原文地址:https://www.cnblogs.com/sode/p/2580572.html
Copyright © 2011-2022 走看看