运行一个循环时,其他控件无法点击 我在一个点击事件里写for(i=0;i<10000;i++){ lable1.text=i.toString();}在运行时,其他控件无法使用,包括关闭都无法点击,就像卡住了,是线程的问题吗?怎样让其他的控件也能使用 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 循环放到线程里或者在循环里加Application.DoEvent();for(i=0;i<10000;i++){ lable1.text=i.toString(); Application.DoEvent();} public partial class Form2 : Form {//申明委托delegate void LockWindowDelegate(bool enabled);//定义委托对象private LockWindowDelegate _lockWindow; public Form2(){ InitializeComponent();//对象初始化 _lockWindow = new LockWindowDelegate(lochFunction);} private void startAsyncButton_Click(object sender, EventArgs e) {//异步调用1 this.BeginInvoke(_lockWindow, true);//异步调用2 IAsyncResult iar= _lockWindow.BeginInvoke(true,null,null);//停止调用 _lockWindow.EndInvoke(iar); } private void lochFunction(bool bol) { if (bol) { this.startAsyncButton.Enabled = false; this.cancelAsyncButton.Enabled = true; } else { this.startAsyncButton.Enabled = true; this.cancelAsyncButton.Enabled = false; } }} 加Application.DoEvent();算是一个简单的办法了,如果循环内容写多了,处理event就有延迟了 是的DoEvents消耗资源比较多,不建议使用,最好还是用委托和线程如果用DoEvents,建议不要每次循环都用,10次或100次用一次DoEventsfor(i=0;i<10000;i++){ lable1.text=i.toString(); if(i%100==0) { Application.DoEvent(); }} 新建一个线程循环,不在主线程里循环就行了。Application.DoEvent(); 不建议使用。 新建个线程,在里面做循环.需要改变label的属性时使用invoke 如何引用类 急急急! CSLA.Net 3.5 我在看测试程序PTWeb 当我保存中文之后数据库数据变成“?”英文没事,如何设置呢,还有CSLA的本地化是如何使用呢 在Datagrid中怎样让符合条件的某个单元格的字体显示红色? 加密问题 请问测试一个网站速度有什么工具可用? 为什么中文显示乱码 AtlasControlToolkit.dll下载 请从事ERP软件开发的同仁们发表意见。 请问那位大虾知道怎样把一个access表转化为一个c#类? 用C#做的组件能在VB6.0中用吗? Post数据后跳转回错误信息 在一个已经有数据的gridview中,有哪些方法可以把这些数据导入到数据库??
{
lable1.text=i.toString();
Application.DoEvent();
}
public partial class Form2 : Form
{//申明委托
delegate void LockWindowDelegate(bool enabled);
//定义委托对象private LockWindowDelegate _lockWindow;
public Form2()
{
InitializeComponent();
//对象初始化 _lockWindow = new LockWindowDelegate(lochFunction);
}
private void startAsyncButton_Click(object sender, EventArgs e)
{//异步调用1
this.BeginInvoke(_lockWindow, true);
//异步调用2 IAsyncResult iar= _lockWindow.BeginInvoke(true,null,null);
//停止调用 _lockWindow.EndInvoke(iar);
} private void lochFunction(bool bol)
{
if (bol)
{
this.startAsyncButton.Enabled = false;
this.cancelAsyncButton.Enabled = true;
}
else
{
this.startAsyncButton.Enabled = true;
this.cancelAsyncButton.Enabled = false;
}
}
}
加Application.DoEvent();算是一个简单的办法了,如果循环内容写多了,处理event就有延迟了
{
lable1.text=i.toString();
if(i%100==0)
{
Application.DoEvent();
}
}
Application.DoEvent(); 不建议使用。