当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: 如何知道数据库中哪张表被最后修改,谢谢! ......
    摘要: 奇怪问题向大家讨教,本人用这段代码从本机一个文件保存,可以弹出对话框要下载文件,而且我设置断点,可以读入字节,但是总是保存本页面什么原因??? filestream myfile = file.openread("d:\\tt.xls"); byte[] filecont = new byte[myfile.length]; myfile.read(fil......


【】winform里后台线程如何修改界面

程序的主窗体mianform将会起一个后台线程接收数据  
  当有数据来时,线程要修改form1子窗体里的控件值  
   
  查了些资料,如用代理...   但还是不清楚如何用?

NO.1   作者: bladebengbu

首先在winform中写上需要进行委托的方法,如控制控件显示内容的,这里的例子是绑定DataGrid的方法:  
  //绑定DataGrid  
  public   void   ConnectToData(string   sSearch)  
  {    
  //   Create   the   ConnectionString   and   crete   a   SqlConnection.    
  //   Insert   code   to   process   data.  
  DG_CarList.TableStyles.Clear();  
  DataSet   ds   =   new   DataSet();  
                    ds   =   db.getrs(sSearch,"Car_Info");  
  if(ds   ==   null)  
  {  
  return;  
  }  
   
  nRows   =   ds.Tables[0].Rows.Count;  
   
  //动态添加一列Boolean类型的列,可在DataGrid中显示为CheckBox  
  ds.Tables["Car_Info"].Columns.Add("choose",Type.GetType("System.Boolean"));  
  DG_CarList.SetDataBinding(ds,"Car_Info");  
  //防止产生最后一空行  
  CurrencyManager   cm   =   (CurrencyManager)this.BindingContext[DG_CarList.DataSource,   DG_CarList.DataMember];              
  ((DataView)cm.List).AllowNew   =   false;  
   
  DataGridTableStyle   ts1   =   new   DataGridTableStyle();    
  ts1.MappingName   =   ds.Tables[0].TableName;    
  //   Set   other   properties.    
  ts1.AlternatingBackColor   =   Color.LightGray;    
   
   
  DataGridColumnStyle   CheckboxCol   =   new   DataGridBoolColumn();    
  CheckboxCol.HeaderText   =   "选择";    
  CheckboxCol.MappingName   =   "choose";    
  CheckboxCol.Width   =   50;  
  ((DataGridBoolColumn)CheckboxCol).AllowNull   =   false;  
  ((DataGridBoolColumn)CheckboxCol).FalseValue   =   false;  
  ((DataGridBoolColumn)CheckboxCol).TrueValue   =   true;  
   
  ts1.GridColumnStyles.Add(CheckboxCol);    
  /*   Add   a   GridColumnStyle   and   set   its   MappingName    
  to   the   name   of   a   DataColumn   in   the   DataTable.    
  Set   the   HeaderText   and   Width   properties.   */    
   
  DataGridColumnStyle   ObjectIDCol   =   new   DataGridTextBoxColumn();  
  ObjectIDCol.MappingName   =   "ObjectID";    
  ObjectIDCol.HeaderText   =   "管理号";    
  ObjectIDCol.ReadOnly   =   true;  
  ObjectIDCol.Width   =   70;    
  ts1.GridColumnStyles.Add(ObjectIDCol);    
  //....  
  DG_CarList.TableStyles.Add(ts1);  
  }  
   
  然后在该代码文件的最后加入:  
  //新建立一个调用ConnectToData的委托  
  public   delegate   void   ConnectToDataCallback(string   sSearch);  
   
  在另一页面,即执行后台线程的页面中:  
  if(YM001.ymCarList   !=   null)  
  {  
  string   sSearch   =   "....";  
  //使用委托,用于绑定车辆列表页面的DataGrid  
  YM001.ymCarList.Invoke(new   YM002.ConnectToDataCallback(YM001.ymCarList.ConnectToData)  
  ,   new   object[]{sSearch});  
  }  
   
  其中YM001为主菜单页面,ymCarList为YM002的对象,而ConnectToData是委托的方法  
  该委托的目的是,   当有新数据进入数据库,且通过YM001产生的YM002的对象ymCarList不为空,则调用YM002的ConnectData方法,重新绑定DataGrid  
  该页面已经使用半年,尚无异常报出

NO.2   作者: bladebengbu

PS:ymCarList是静态对象,其在YM001主菜单页面中,点击打开YM002用的按钮时实例化  
  而激发委托是在后台文件的代码中,即在控制线程的函数中  
  YM002----编制需要委托的方法  
                    声明委托  
  YM001----建立YM002的静态对象:ymCarList,并将其实例化  
   
  后台文件,如ClsReceiveData.cs-----激发委托:YM001.ymCarList.Invoke(new   YM002.ConnectToDataCallback(YM001.ymCarList.ConnectToData)  
 

NO.3   作者: Sunmast

搜索Control.Invoke

NO.4   作者: zhzuo

你看了就知道  
  http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx

NO.5   作者: CMIC

http://www.cnblogs.com/rustle/articles/11301.aspx


 ·北京哪里可以买到便宜的书    »显示摘要«
    摘要: 盗版、旧书,都行只要便宜!穷啊! ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE