程序的主窗体mianform将会起一个后台线程接收数据
当有数据来时,线程要修改form1子窗体里的控件值查了些资料,如用代理... 但还是不清楚如何用?
当有数据来时,线程要修改form1子窗体里的控件值查了些资料,如用代理... 但还是不清楚如何用?
解决方案 »
- 如何实现点击一个按钮触发其它按钮的点击事件?
- 研究如何截获目录事件(c#)
- c#怎样让窗口的指定区域半透明?或者可以用png作为窗口背景?
- .net 程序集的文件大小最大能多大?它拥有的类的个数最多为多少个?在vs 200x里开发类库模块,最多可以有多少个cs文件?
- visual studio 2008初学者求帮助,万分感谢,找了好久不知道什么原因?情况如下
- 晕,删除了datagrid中选中的一行后,为什么该行不立即消失???
- 急!马上揭帖,怎么将一个InputStream流中的数据转变成string?
- 怎么样得到网络中任意一台机器的硬件信息和系统信息?
- 怎么输出数学符号?
- 在线求助
- 关于dateGrid数据绑定的问题
- 关于在Winform下,在一个主框架中调用Dll的问题 !
//绑定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
该页面已经使用半年,尚无异常报出
而激发委托是在后台文件的代码中,即在控制线程的函数中
YM002----编制需要委托的方法
声明委托
YM001----建立YM002的静态对象:ymCarList,并将其实例化后台文件,如ClsReceiveData.cs-----激发委托:YM001.ymCarList.Invoke(new YM002.ConnectToDataCallback(YM001.ymCarList.ConnectToData)
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx