一个wpf异步绑定数据的例子

        DataTable dt = new DataTable("Info");
        delegate void BindDataAsync();
        GridView gv = new GridView();
private void btnLoad_Click(object sender, RoutedEventArgs e)
        {
            BeginBindData();
        }
 #region Invoke the Binding Data method asynchorously
        private void BeginBindData()
        {
            BindDataAsync bindData = new BindDataAsync(BindData);
            IAsyncResult iar = bindData.BeginInvoke(new AsyncCallback(EndBindData), bindData);
            tsStatus.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
            {
                tsStatus.Content = "正在加载中。。。";
            }));
        }

        private void EndBindData(IAsyncResult iar)
        {
            tsStatus.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
            {
                tsStatus.Content = "加载完毕。。。";
            }));
            BindDataAsync bindData = (BindDataAsync)iar.AsyncState;
            bindData.EndInvoke(iar);
        }

        private void BindData()
        {

            GetHeader();
            DataTable dt = LoadData();

            tsStatus.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
            {
                tsStatus.Content = "正在绑定数据,请稍候。。。";
            }));

            //using Dispatcher to avoid crossing thread exception
            listView1.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
            {
               
                foreach (DataColumn item in dt.Columns)
                {
                    GridViewColumn gvc = new GridViewColumn();
                    gvc.DisplayMemberBinding = new Binding(item.ColumnName);
                    gvc.Header = item.ColumnName;
                    gv.Columns.Add(gvc);
                }

                listView1.View = gv;
                listView1.DataContext = dt;
                listView1.SetBinding(ListView.ItemsSourceProperty, new Binding());  //must add this , otherwise it will not be showen

               
            }));
        }
        #endregion

        #region Initialize the DataTable

        private void GetHeader()
        {
            DataColumn dc = new DataColumn();
            dc.ColumnName = "name";
            dt.Columns.Add(dc);
           

        }

        private DataTable LoadData()
        {

                for (int i = 1; i < 10000; i++)
                {
                    DataRow dr = dt.NewRow();
                    dr[0] = i.ToString();
                    tsStatus.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
                    {
                        tsStatus.Content = "当前已经加载" + i + "条数据。。。";
                    }));
                    dt.Rows.Add(dr);
                }
            return dt;
        }

        #endregion

  

转载于:https://www.cnblogs.com/lhx880619/archive/2012/06/26/2562959.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值