我们都知道简单的运用多线程的方法有
1/ Thread thread=new Thread(new StartThread(this.method))
     thread.start();
2/ define delegate
    public delegate void MethodDelegate();
    instance delegate
    MethodDelegate md=new    MethodDelegate(this.method)
    md.BeginInvoke();

在winform程序下我们经常遇到在做查询的时候,当查询数据特别多的时候就会出现界面停滞的现象,不能做任何其他事情,只能等待这个查询完成;这时我们自然想到了要运用多线程技术;来解决这个问题

我的代码结构是
dbmanager.readTable(string table,string express):DataTable 查询数据库返回一个DataTable(时间就浪费在这里);
QueryFrm 查询窗体 有一些条件的输入,还有一个DataGrid做现实

一般的做法
private void Query()
{
    string express =" where 1=1";
    DataTable dt=dbmanager.ReadTable("table",express);
    dataGrid.DataSource=dt;
}
尝试用委托来做
public  delegate DataTable QueryDelegate(string table,string express);

private void Query()
{
    string express =" where 1=1";
    QueryDelegate querydelegate=new QueryDelegate(dbmanager.ReadTable)
    querydelegate.BeginInvoke("table",express,new AsyncCallback(QueryCompeled),querydelegate);
}
private void QueryCompeled(IAsyncResult ar)
{
try{
    QueryDelegate querydelegate=(QueryDelegate)ar.AsyncState;
    DataTable dt=querydelegate.EndInvoke(ar);
    dataGrid.DataSource=dt;
}
catch(Exception e)
{
    Console.Write(e);//这种做法会报错,提示+ ex {"Controls created on one thread cannot be parented to a control on a different thread." } System.Exception

}
}
这种错误网上一查多的是网上也有多说法,

有人可能会想到使用窗体的BeginInvoke来调用,后来发现这种做法是并不能做到异步调用,仍然会造成死机的现象

后来我找一个变通的方法

public  delegate DataTable QueryDelegate(string table,string express);
public  delegate void QueryCompleted(DataTable dt);
private void Query()
{
    string express =" where 1=1";
    QueryDelegate querydelegate=new QueryDelegate(dbmanager.ReadTable)
    querydelegate.BeginInvoke("table",express,new AsyncCallback(QueryCompeled),querydelegate);
}
private void QueryCompeled(IAsyncResult ar)
{
    try{
        QueryDelegate querydelegate=(QueryDelegate)ar.AsyncState;
        DataTable dt=querydelegate.EndInvoke(ar);
        object[] arg=new object[];
        arg[0]=dt;
        QueryCompleted qc=new QueryCompleted (this.BindResult);
        this.BeginInvoke(qc,arg);
    }
    catch(Exception e)
    {
    Console.Write(e)

}
}
private void  BindResult(DataTable dt)
{
    dataGrid.DataSource=dt;
}

这样就解决了窗体死机的现象;

如果大家还有更好的方法,我们一起讨论

Winform 的一个多线程绑定DataGrid数据源的例子相关推荐

  1. .Net平台Winform两个ComboBox控件绑定同一个数据源

    今天WINFROM编程遇到这么一个问题:是有关WINFORM中两个comboBox控件绑定同一个数据源的问题,在窗体的界面上有两个comboBox,我在Form1_Load中对他们做了数据绑定(具体代 ...

  2. wpf DataGrid主从表,DataGrid嵌套DataGrid主从结构rowdetailtemplate实现,绑定DataTable数据源,使用Visual Studio 2017

    wpf DataGrid主从表,DataGrid嵌套DataGrid主从结构rowdetailtemplate实现,绑定DataTable数据源,使用Visual Studio 2017 . 子表绑定 ...

  3. Nexus.js介绍:一个多线程的JavaScript运行库

    首先,如果你不熟悉这个项目,建议先阅读之前写的一系列文章.如果你不想阅读这些,不用担心.这里面也会涉及到那些内容. 现在,让我们开始吧. 去年,我开始实现Nexus.js,这是一个基于Webkit/J ...

  4. chart绑定mysql数据源_MSChart图表之Chart组件 学习一篇(5个主要属性+数据源绑定)...

    前沿:简单练习效果---- 一.5大属性简介: 整个图形控件主要由以下几个部份组成:1.Annotations --图形注解集合 2.ChartAreas --图表区域集合 3.Legends --图 ...

  5. Repeater绑定ArrayList数据源

    Repeater绑定ArrayList数据源 就相当与把ArrayList的数据绑定到Repeater的ItemTemplate 上 就是RepeaterItem等于ArrayList的一项例如 Me ...

  6. ASP.Net绑定Sql数据源用echarts图表来展示数据

    ASP.Net绑定Sql数据源用echarts图表来展示数据 这里我们需要先学会ajax请求和网页的echarts图的使用 不会的同学也没关系可以看我接下来的内容我会一步步的来讲解的 首先大家可以先从 ...

  7. python 多线程 类_Python中如何自定义一个多线程类呢?

    摘要: 下文讲述Python中自定义一个多线程类的方法分享,如下所示: 实现思路: 1.定义一个类继承threading.Thread 2.在自定义类中构造函数重写run方法 例: Python3中自 ...

  8. oracle into多个变量,Oracle中merge into的使用:该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据....

    该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动. 1,ins ...

  9. 用 python 实现一个多线程网页下载器

    今天上来分享一下昨天实现的一个多线程网页下载器. 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据.把它放上来也是想大家帮忙挑刺,找找 bug,让它工作得更好. k ...

最新文章

  1. 直接对梯度下手,阿里达摩院提出新型优化方法,一行代码即可替换现有优化器...
  2. 《数学之美》第23章 布隆过滤器
  3. centos7 rpm安装MySQL
  4. peleenet测试
  5. 直播预告 | 旷视科技李彦玮:动态网络及其在场景分割中的应用
  6. 数据仓库/集市 星形/雪花形 事实/维度表
  7. apache weblogic ssl linux,apache基于ssl配置weblogic(完结篇)
  8. linux中修改字符编码
  9. Spring事务那些事儿
  10. java mariadb 使用,java连接mariaDB的设置,java连接mariadb
  11. 太棒了!港大同济伯克利推出目标检测新范式:Sparse R-CNN
  12. python开发环境有哪些特点_快速了解Python开发环境Spyder
  13. bzoj2595 [Wc2008]游览计划
  14. R语言CRAN软件包Meta分析 1
  15. JavaScript的封装方法
  16. GDKOI2021普及组滚粗记
  17. 美化 PowerShell
  18. 怎样转载csdn文章
  19. 让你高效工作的7大工具类网站
  20. HashMap 为什么是2倍扩容

热门文章

  1. 使用Huploadify上传文件并动态传递参数到后台
  2. mysql master or master copy
  3. markdown常见问题
  4. oracle Instance status: READY–lsnrctl status|start|stop
  5. 涨知识了!阿里、百度、腾讯的名字竟然是这样来的
  6. webservice 心得
  7. 致程序猿:专业课老师没教的,都在这8本书里了
  8. 10年IT老兵酒后吐真言,我看了5遍...
  9. 徐昊:运用四色建模法进行领域分析
  10. 托管式服务网格:多种类型计算服务统一管理的基础设施