开了两个线程,定义了俩个Bool变量用来标识这两个线程是否执行完。执行完后赋值true。
然后再timer里没3秒执行if判断,如果线程实行完了,再将线程实行一边,如此循环。代码写好了,界面有点卡,如何优化呢?//构造函数给委托指定方法,应为线程中会操作界面控件(但对界面控件的操作代码还没写就有点卡)
public frmMain()
{
   InitializeComponent();
   this.getLoadA = this.getAData;
   this.getLoadB = this.getBData;
}
bool isAThreadEnd = false;
bool isBThreadEnd = false; //A委托
public delegate void setASDelegate();
private setASDelegate getLoadA;
//B委托
public delegate void setBDelegate();
private setBDelegateg etLoadB;//允许A操作控件
private void ThreadAMethod()
{
   this.Invoke(this.getLoadA);
}
//允许B操作控件
private void ThreadBMethod()
{
   this.Invoke(this.getLoadB);
}
//开启A线程
private void startAThread()
{
    ThreadStartGetAData = new Thread(new ThreadStart(this.ThreadAMethod));
    ThreadStartGetAData .Start();
}//开启B线程
private void startBThread()
{
    ThreadStartGetBData = new Thread(new ThreadStart(this.ThreadBMethod));
    ThreadStartGetBData .Start();
}private void getAData()
{
  //各种操作,暂时没写界面控件控制代码执行完后isAThreadEnd赋值true
   isAThreadEnd=true;
}private void getBData()
{
  //各种操作,暂时没写界面控件控制代码执行完后isBThreadEnd赋值true
   isBThreadEnd=true;
}//单击按钮开始线程
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
   this.startAThread();
   this.startBThread();
}//程序运行后即可执行
private void timer1_Tick(object sender, EventArgs e)
{
     if (isASThreadEnd == true)
     {
         this.startAThread();
     }
     if (isBThreadEnd == true)
     {
         this.startBThread();
      } }
以上是简化代码,用委托执行线程方法,为的是在线程中可操作界面控件,可还没写界面控件的操作代码,运行的时候就有点卡了,窗体拖动不流畅,代码倒是都执行了。请问如何优化这个过程。

解决方案 »

  1.   

    getLoadA和 getLoadB都关联了什么代码吗
      

  2.   


    查数据库数据,然后存到另一个表中。不用Timer时很快。
      

  3.   

    你的isASThreadEnd 被赋值成ture后不是就一直死命的 打开心的线程了
      

  4.   


    这个问题已经改正了。
    timer的执行频率也改大了点,效果好点。还有什么其他方式进行优化么?
      

  5.   

    要不你把Time也改成线程来试试呵。可能会快点!
      

  6.   

    线程怎么定时重复执行?
    用While(true),然后sleep?我感觉那样很危险。