多现成简单问题

成都锦福工作室 2008-10-10 02:55:43
初学线程 想通过代码实现以下效果
winform上 分别有:label1 label2 button1
当我点击button1时 label1的text分别从1到100计数
label2的text分别从1到500计数

计数同时开始
请给出代码 谢谢
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
结贴了 感谢二位 明白了
homejiji 2008-10-10
  • 打赏
  • 举报
回复
..没有看清楚2楼的方法不需要委托,也可以实现的

但是。。CheckForIllegalCrossThreadCalls =false 这样做是不安全的所以最好还是用委托。。

CheckForIllegalCrossThreadCalls在.net1.x中默认是false,也就是不检查,.net2.0和3.x默认是true
CheckForIllegalCrossThreadCalls容许子线呈随时更新ui
http://blog.csdn.net/jinjazz/archive/2007/12/10/1927126.aspx

homejiji 2008-10-10
  • 打赏
  • 举报
回复
...补充个。。2楼的只适合vs2003,如果2005,2008需要用到委托。。
例如
public delegate void addTxt(string str);
private void AddStr1(string str)
{
if (this.InvokeRequired)
{
addTxt haha = new addTxt(AddStr1);
this.Invoke(haha , new object[] { str });
}
else
label1.text=str;

}

将label1.text=i.tostring(); -〉替换成AddStr1(i.tostring);

3楼的代码abort是多余的。。。。
hao1hao2hao3 2008-10-10
  • 打赏
  • 举报
回复
public void aa()
{
for(int i=0;i <100;i++)
{
label1.text=i.tostring()
}
a.abort();
}

public void bb ()
{
for (int j=0;j <500;j++)
{
label2.text=j.tostring();
}
b.abort();
}

这些不是在Button_Click ()中写的,这些是两个方法。呵呵。
对了还要在aa和bb的循环结束后关闭线程,分别见代码
hao1hao2hao3 2008-10-10
  • 打赏
  • 举报
回复
在Form_Load()中加上CheckForIllegalCrossThreadCalls =false
在Button1_Click()中写
thread a=new thread(new ThreadStart(aa));
a.start();
thread b =new thread(new ThreadStart(bb));
b.start();
public void aa()
{
for(int i=0;i<100;i++)
{
label1.text=i.tostring()
}
}

public void bb ()
{
for (int j=0;j<500;j++)
{
label2.text=j.tostring();
}
}


随手写的 ,可能有语法或者写法的错误,请更正;

110,533

社区成员

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

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

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