



























本来在做下载的进度条,自己的线程访问 ProgressBar时候出现错误:
错误代码
- -上网搜索下,原来我自己创建的线程和ui的线程不在一起.....看的我头大.
具体资料请看
http://www.yoda.arachsys.com/csharp/threads/winforms.shtml
一直接调用委托不行的必须是,MethodInvoker updateCounterDelegate = new MethodInvoker(UpdateCount);
这个委托才可以,但是好象不能传递参数,可以通过,下面的方式传递参数,而且这样写就可以访问ui线程

int currentCount;

void UpdateCount()
{
int tmpCount;
lock (stateLock)
{
tmpCount = currentCount;
}
counter.Text = tmpCount.ToString();
}
二.- -另外自定义委托的调用
delegate void StringParameterDelegate(string value);
//-----用线程直接访这个方法就可以
void UpdateStatus(string value)
{//--判断是否在ui线程中工作哦
if (InvokeRequired)
{

//--BeginInvoke 所调用的委托根本就是在 UI 线程中执行的。- -优点想递调用
// We're not in the UI thread, so we need to call BeginInvoke
BeginInvoke(new StringParameterDelegate(UpdateStatus), new object[] { value });
return;
}
// Must be on the UI thread if we've got this far,如果在直接设置
statusIndicator.Text = value;
}

例子![]()
test_2.Designer.cs
test_2.cs
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。