线程优化,如何能让界面不太卡。

shuguangleo 2012-08-07 02:18:05
开了两个线程,定义了俩个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();
}

}


以上是简化代码,用委托执行线程方法,为的是在线程中可操作界面控件,可还没写界面控件的操作代码,运行的时候就有点卡了,窗体拖动不流畅,代码倒是都执行了。

请问如何优化这个过程。
...全文
501 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
THQWS 2012-08-08
  • 打赏
  • 举报
回复
要不你把Time也改成线程来试试呵。可能会快点!
shuguangleo 2012-08-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
你的isASThreadEnd 被赋值成ture后不是就一直死命的 打开心的线程了
[/Quote]

这个问题已经改正了。
timer的执行频率也改大了点,效果好点。

还有什么其他方式进行优化么?
shuguangleo 2012-08-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
要不你把Time也改成线程来试试呵。可能会快点!
[/Quote]
线程怎么定时重复执行?
用While(true),然后sleep?我感觉那样很危险。
df629004 2012-08-07
  • 打赏
  • 举报
回复
你的isASThreadEnd 被赋值成ture后不是就一直死命的 打开心的线程了
shuguangleo 2012-08-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
getLoadA和 getLoadB都关联了什么代码吗
[/Quote]

查数据库数据,然后存到另一个表中。不用Timer时很快。
bdmh 2012-08-07
  • 打赏
  • 举报
回复
getLoadA和 getLoadB都关联了什么代码吗
内容概要:本文围绕【Koopman降阶非线性辨识与控制】开展研究,聚焦于数据驱动(Data-driven)框架下库普曼(Koopman)控制特征函数的分析与实现,提出一种基于Matlab的简化版代码实现方法。该研究通过构建简化的Koopman算子模型,对非线性系统进行线性化降阶处理,从而实现对复杂系统动态行为的有效辨识与控制。文中详细阐述了Koopman谱分析、动态模态分解(DMD)等核心理论在控制中的应用,结合具体Matlab代码演示了特征函数的提取流程与控制策略的设计,强调算法的可复现性与工程实用性。研究不仅适用于非线性系统建模,也为高维复杂系统的实时控制提供了轻量化解决方案。; 适合人群:具备一定非线性系统控制、现代控制理论基础和Matlab编程能力的研究生、科研人员及自动化、航空航天、机器人等领域的工程技术人员。; 使用场景及目标:① 学习并掌握数据驱动的Koopman控制理论及其在非线性系统降阶中的应用;② 通过提供的Matlab代码实现,复现并验证Koopman特征函数的提取与控制效果,加深对降阶模型的理解;③ 将该方法应用于如机器人控制、飞行器姿态调整、能源系统调度等存在复杂非线性的实际场景中,以实现高效、稳定的控制。; 阅读建议:此资源侧重于理论与代码实现的紧密结合,建议读者在学习时首先理解Koopman算子的基本思想,然后对照Matlab代码逐行分析其实现逻辑,重点关注数据预处理、算子构造、特征值求解等关键步骤。同时,应结合实际应用场景,尝试修改参数或测试不同数据,以充分把握该方法的优势与局限性。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧