public void DoGUIClear()
{
if (this.InvokeRequired)
{
GUIClear delegateMethod = new GUIClear(this.DoGUIClear);
this.Invoke(delegateMethod);
}
else
this.lstRegisterValues.Items.Clear();
}
源程序如上,我不清楚该程序段的功能,特别是if那部分。感觉是一个循环调用并等待的过程,不知道是不是这样的
{
if (this.InvokeRequired)
{
GUIClear delegateMethod = new GUIClear(this.DoGUIClear);
this.Invoke(delegateMethod);
}
else
this.lstRegisterValues.Items.Clear();
}
源程序如上,我不清楚该程序段的功能,特别是if那部分。感觉是一个循环调用并等待的过程,不知道是不是这样的
是这么回事.. 如果不想这么调用 必须设置一个值
// 获取或设置一个值,该值指示是否捕获对错误线程的调用,这些调用在调试应用程序时访问控件的 System.Windows.Forms.Control.Handle 属性。
// 返回结果:
// 如果捕获了对错误线程的调用,则为 true;否则为 false。
Control.CheckForIllegalCrossThreadCalls = false;否则 在非创建控件的线程上调用控件的方法和属性会报异常的.
public void DoGUIClear()
{
if (this.InvokeRequired)//如果在非创建控件的线程上.
{
//生成一个委托的方法
GUIClear delegateMethod = new GUIClear(this.DoGUIClear);
//调用委托的方法. 这个调用,使用了this对象(创建控件的句柄对象)
this.Invoke(delegateMethod);//这么调用就"名正言顺"了
}
else//否则 是在创建控件的线程上执行此函数, 可以直接访问控件.
this.lstRegisterValues.Items.Clear();
}