您的位置:首页 > 其它

车辆信息统计报表管理系统--子、父线程调用的问题(委托)

2013-06-13 14:32 477 查看
下面这个委托有问题,死循环会导致CPU 100%。子线程不能调用父线程。
while (!this.WinControl.IsHandleCreated)
{

}
this.WinControl.Invoke(dalegateBinding);//调用委托去刷新窗体

修改后的:
#region 使用线程绑定数据

Thread ThreadBinding = null;
ThreadStart BindingStart = null;

delegate void BindingHander();
BindingHander dalegateBinding = null;
/// <summary>
/// 线程加载数据
/// </summary>
private void BindingData()
{
BindingStart = new ThreadStart(GetBindingData);
ThreadBinding = new Thread(BindingStart);
ThreadBinding.IsBackground = true;
ThreadBinding.Name = "EngineRotateSpeed_Analysis_Widget";
ThreadBinding.Start();
dalegateBinding = new BindingHander(DoBindingData);
}

DataSet ds = new DataSet();
WidgetDrive mWidgetDrive = new WidgetDrive();

/// <summary>
/// 获取数据与绑定
/// </summary>
void GetBindingData()
{
try
{
ds = DataLayerTest.Get_Engine_RotateSpeed_Analysis_List_Rpt(mWidgetDrive);//获取数据
if (this.WinControl==null||this.WinControl.IsDisposed)
{

}
else
{
while (!Helper.CanUse(this.WinControl))
{

}

this.WinControl.Invoke(dalegateBinding);//调用委托去刷新窗体
}
}

finally
{
ThreadBinding.Abort();
}
}

/// <summary>
/// 用获取的DataSet分运行时间端绑定器件数据
/// </summary>
void DoBindingData()
{
ZedGraphControl zgc = base.WinControl as ZedGraphControl;
switch (mWidgetDrive.ChartType)
{
case TimeType.Day:

CreateChartDay(ref zgc);//生成日图表

break;
case TimeType.Week:

CreateChartWeek(ref zgc);//生成周图表。

break;
case TimeType.Month:

CreateChartMonth(ref zgc);//生成月图表。

break;
}
zgc.Invalidate();
}
#endregion
// Helper类里面的CanUsr方法
internal static bool CanUse(Control control)
{
return control!=null&&!control.IsDisposed && control.IsHandleCreated;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: