zoukankan      html  css  js  c++  java
  • 车辆信息统计报表管理系统子、父线程调用的问题(委托)

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

     }

     

  • 相关阅读:
    完整的网站开发技术学习建议
    在微信小程序中绘制图表(part2)
    原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
    第八届蓝桥杯第二题:等差素数列
    第七届蓝桥杯第四题:快速排序
    51Nod:1086背包问题 V2
    POJ:2386 Lake Counting(dfs)
    51Nod:1268 和为K的组合
    迭代器
    51Nod:1134 最长递增子序列
  • 原文地址:https://www.cnblogs.com/Gemgin/p/3136355.html
Copyright © 2011-2022 走看看