for (int i = 0; i < 100,000; i++)
{
threadEvent.Invoke(i, new EventArgs());// tell processbar value
}
threadEvent += new EventHandler(method_threadEvent);
void method_threadEvent(object sender, EventArgs e)
{
int nowValue = Convert.ToInt32(sender);
nowValueDelegate now = new nowValueDelegate(setNow);
this.Invoke(now, nowValue);
}
private void setNow(int nowValue)
{
this.progressBar1.Value = nowValue;
}
private delegate void nowValueDelegate(int nowValue);
在环我什么都不做
,但同时也浪费了大量的时间!在线程,当循环太多时间,调用浪费了大量的时间
为什么threadEvent.Invoke花这么多时间?
这是不正确的,“在循环中我什么都不做”;你正在调用'threadEvent.Invoke'。事实上,这是你做的唯一的事情,所以当然这需要100%的时间。 –
这只是一个例子,我删除了其他代码,当更新进程栏时,如果我不使用调用,它会占用太多时间,实际上它可以很快完成。 – user1908725
你想听什么?正如你发现的那样,调用是昂贵的。不经常调用。进度条不必更新100K次。每100ms更新一次。 – usr