关于线程用线程刷新界面,界面会卡死``急`在线等帮助!!

long331 2011-01-04 02:57:09
举个例子:

界面上有一个 Panel,

用一个 System.Timers.Timer 相隔 2秒 开一个线程,线程处理的就是 New 一个ProgressBar() 添加到Panel里面。

线程里要处理的代码如下:


void ProcessWork()
{

ProgressBar bar = new ProgressBar();
panel1.Controls.Add(bar);
bar.Dock = DockStyle.Top;
bar.Maximum = 1000000;

for (int i = 1; i <= 1000000; i++)
{
bar.Value = i;
}
}


计时器不断相隔2秒开一个线程出来,但点样做到当前正在处理的线程没处理完成,其他线程在排队等待呢?而且不能让界面卡死...

请高手们详细指教指教啊~~~~!!!!!
...全文
364 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhyindividual 2011-01-04
  • 打赏
  • 举报
回复
在winform中如果动态操作UI控件,需要使用委托.参考代码:

delegate void DelegateBar(int i);

DelegateBar delegateBar = new DelegateBar(this.ControlMethod);//ControlMethod 为事件代码,即对progressbar的操作

然后在 ProcessWork 方法中加上
for(int i = 1; i <= 100000;i++)
bar.Invoke(this.delegateBar , new object[] { i});

long331 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 joeblackzqq 的回复:]

为何需要每2秒创建一个ProgressBar并添加到界面上呢,这应该比较费时间吧,或者说很容易出错的。

你应该再给出点关键代码,看看你是怎么调用的。
[/Quote]

其实这样做就是想为了模拟多线程操作主界面啊``但是要有顺序的操作,也就是当前线程没操作完成,其他线程需要等待,我试过用 Monitor.Wait(),但好像不行``而且会卡死界面``可能是我不会用望指点


void Statr()
{
timer= new System.Timers.Timer(1000);
timer.AutoReset = true;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
}


void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Thread thread = new Thread(ProcessWork);
thread.Start();
}

void ControlAdd()
{

ProgressBar bar = new ProgressBar();

panel1.Controls.Add(bar);
bar.Dock = DockStyle.Top;
bar.Maximum = 1000000;

for (int i = 1; i <= 1000000; i++)
{
bar.Value = i;
}
}

paual779 2011-01-04
  • 打赏
  • 举报
回复
帖全代码。
JoeBlackzqq 2011-01-04
  • 打赏
  • 举报
回复
为何需要每2秒创建一个ProgressBar并添加到界面上呢,这应该比较费时间吧,或者说很容易出错的。

你应该再给出点关键代码,看看你是怎么调用的。
wuyq11 2011-01-04
  • 打赏
  • 举报
回复
System.Timer.Timer和System.Threading.Timer:
前者是通过调用Windows的WaitableTimer实现的,后者是.NET的简单的Thread.Sleep实现。两个实现都是用了.NET线程池(ThreadPool),所以Elapsed事件会在ThreadPool里选择一个线程执行。好处是如果前一次Elapsed没有完成,后一次的可以从ThreadPool里选一个新的线程开始执行
多线程操作一个progreessbar
##KodExplorer (http://kalcaddle.com/) ###ver2.61(2014.7.12) `商业版授权请联系:kalcaddle#qq.com` #### 1.是什么: - Kodexplorer为千帆网络工作室开发的一款服务器文件管理程序。 - 完美取代FTP管理:可用于服务器文件管理,zip解压缩 备份还原、支持图片、音乐、视频预览、office、pdf等格式在线预览。文件夹拖拽上传……。 - 在线编程:支持几乎所有编程语言的在线编辑(高亮,多光标编辑.堪比本地的sublime) - 极佳的操作体验:及其便捷的快捷键支持,让你拥有本地化的体验 - 中文等多语言支持:中文编码全面兼容,文件编辑自动适配。 - 超快的速度:全面采用Ajax+Json进行数据通信,毫秒级的响应速度; - 全平台兼容性:Win Linux Mac (Apache、Nginx、IIS) #### 2.使用场景: - 取代FTP,服务端、客户端软件等复杂的安装配置。kod可以一键安装随处使用. - 你可以用它来管理你的服务器(备份,在线解压缩,版本发布....) - 你可以把他当做管理linux的一个操作系统界面 - 可以用来作为私有云存储系统,存储你的文件... - 当然你也可以用来分享文件 - Web IDE / browser code editor awesomeness - 更多场景等你来挖掘!…… #### 3.使用说明 管理员: admin/admin 普通用户:demo/demo 游客用户:guest/guest [如何使用] 下载程序,解压上传到你的服务器路径下,data目录设置777权限。访问体验超便捷的服务吧! (data目录没有写权限导致配置修改不能保存、不能新建用户等) [关于上传问题] 程序没有做任何限制,如果需要上传大文件,则修改 php.ini:`upload_max_filesize = 1000M post_max_size = 1000M` [关于解压缩问题] 程序不做任何限制,如若失败请设置php内存限制。memory_limit 1000M [关于兼容性] 建议使用chrome firefox ie9+ 体验更完整。ie8以下基本上不做兼容处理。chrome支持文件夹拖拽上传。 [文件打开] office文件在线预览功能,服务器必须在公网(外部能访问该服务器) [忘记密码] 修改data/system/member.php 密码为明文的md5值 例如将admin密码重设为admin 则修改第一行:"name":"admin","password":"21232f297a57a5a743894a0e4a801fc3" ![](https://cloud.githubusercontent.com/assets/3761968/2583304/764f562a-b9cf-11e3-8e59-afdbdffc20eb.png) ###ver2.61 `2014/7/12` ---- ####update: - 实时搜索,根据搜索框内容变化,实时选中匹配到的结果; - 弹出搜索框遍历子文件夹递归搜索 - session key 加入kod_前缀 避免和其他系统key冲突 - 编辑器选中优化 选择鼠标到窗口外事件处理 ####fix bug:(bug解决和程序优化) - backspace后退截获浏览器事件,作为后退前一次访问的文件夹; - 搜索首字母不匹配问题 - 弹出层中的弹出层关闭,父窗口失去焦点问题。 - 代码中grunt部分代码拆分开,放到程序外面;提交到git、osc - 桌面:删除alert enter快捷键删除 - install 检测 加入跳过,(只判断用到的函数) 加入多语言 - zip压缩没有权限 提示红色,false 统一查找 - 登录成功后 验证码输错清除 - 非root用户拖拽到文件夹问题 - 非root解压问题 不能解压 - list oexe 图标问题 - 用户目录不存在判断 - fileCahe 互斥锁 reset 不用 - ie 8~10样式问题调整 ###ver2.6 `2014/7/6` ---- ####update: - 完全性优化;加入严格的校验机制 - 首次运行环境检测[data目录检测,必须的函数支持提示] - 上传已存在处理——创建副本(另外包括粘贴,解压) - 选中优化 ctrl选中拖拽 - 键盘快捷键选中文件,多个字符

110,577

社区成员

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

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

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