日期:2014-05-18  浏览次数:20866 次

如何解决开线程界面卡的问题。
开过一个帖子,代码写太多没人看,这次我简单写一下:
C# code

bool isAThreadEnd = false;//A线程未开启
bool isBThreadEnd = false;//B线程未开启

//主线程判断
protected void CtrlThread()
{
    while(true)
    {
         if (isAThreadEnd == false)
         {
              this.startAThread();

         }
         if (isBThreadEnd == false)
         {
              this.startBThread();
         }
         Thread.Sleep(5000);
    }
}

startAThread()和startBThread()两个线程分别读取数据库表然后将结果插入另一张表。操作结束后调用:Abort()杀死线程,并给isAThreadEnd 和isBThreadEnd 赋值false,以便下次循环。
这两个线程均使用委托this.Invoke(),应为以后可能需要刷新控件。但目前刷新控件的代码还没写,每隔五秒界面会卡一下,这是为什么?以前protected void CtrlThread()用timer也是同样的问题。




------解决方案--------------------
sleep(5000)这里睡 了5秒在开启一个先执行啊..意思就是不管这个线程完没有玩都要等待5秒.这5秒完了就开启下一个线程...没有完成就继续改线程... 
我觉得吧..你应该在startBThread()中设置一个A.wait()..这样才能保证顺利插入数据吧
------解决方案--------------------
首先你这个程序会一直不停的执行线程...但是你执行线程拖动窗体的时候..就会开启新的线程..我觉得这个应该是你无论sleep(time),就会time的时候卡下的原因吧..
把拖动窗体的线程 摸个设置为后台线程试试....
------解决方案--------------------
或者你可以去掉sleep()不过需要对自己的线程进行锁定
------解决方案--------------------
你最好把你整个的代码发来看看... CtrlThread();startAThread();startBThread();