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

本文介绍了一个由于不当的线程调用导致的死循环问题及其解决方案。通过使用线程来加载数据并利用委托刷新窗体,避免了UI线程阻塞,确保了程序的稳定运行。

 

        下面这个委托有问题,死循环会导致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;

 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值