关于多线程的简单问题...

cygroup 2003-09-05 09:53:25
我有一主线程,其中有个函数Func1比较费时,我想在该函数执行期间显示一个带有进度条的对话框,在Func1开始执行时显示,在它执行完毕后关闭,运用线程技术实现较好的效果要如何编写代码?另外无法预测Func1的执行时间,进度条的步长、显示时间要如何处理?多谢帮忙!
...全文
80 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Knight94 2003-09-05
  • 打赏
  • 举报
回复
基本同意dwg_cn(温暖的左手)的做法,但是在Func1中不能直接控制进度条,需要用MethodInvoker来做。
dwg_cn 2003-09-05
  • 打赏
  • 举报
回复
System.Threading.Thread t=new System.Threading.Thread(new System.Threading.ThreadStart(Funcl));
t.Start();
在函数Funcl中按常规处理进度条就行了.注意Funcl()函数不可以带参数
91bct 2003-09-05
  • 打赏
  • 举报
回复
up
cygroup 2003-09-05
  • 打赏
  • 举报
回复
实际上我自己已经解决了,要用到两个子线程,主线程按顺序:启动子线程ThreadFunc1(该子线程执行Func1)--显示带有进度条的对话框(dialog.ShowDialog),在该对话框中再启动另一子线程ThreadProgress(该子线程执行一处理进度条的函数,函数中用一循环逐步增加进度条的值,当然其中还加入了一定的延迟,否则ThreadFunc1还未返回进度条就走完了全程).
在Func1执行完以后,ThreadFunc1会通知dialog,dialog进而终止其子线程ThreadProgress,并将进度条剩余的值增加完,在用户看来,进度条的前大半段是逐步增加的,到最后有一小段是飞快第"跑"到底的.
上述方法看上去有些复杂,但可能必须这样,因为在处理进度条时,牵涉到一个dialog自己不知道什么时候要终止的while循环(必须靠ThreadFunc1来通知它终止),而该循环会一直占用CPU时间,这样其他线程就没机会执行了,所以要把它在放入另一线程内.

111,120

社区成员

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

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

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