委托和以前C语言中的函数指针非常类似,但它是类型安全的,代码Dim d As New SetTextCallback(AddressOf SetText),可理解为将d指向了SetText,
public delegate sub SetTextCallback(byval print as string)
这句是声明委托类型,可理解为函数指针原型.
1.在FORM_LOAD中加代码:Me.CheckForIllegalCrossThreadCalls = False
2.用委托
出现这个问题主要是因为在线程方法中操作了界面上的控件..lstPrime.Items.Add()
可以这样改下
//定义一个委托
public delegate void MyInvoke(string str);
//定义一个操作界面的方法
private void UpdateUI(string str)
{
//增加项
this.lstPrime.Items.Add(str);
}
//在线程的方法中,即你的Generate方法..
//里面只要是涉及到Items.Add操作的都改成如下形式即可..
//比如lstPrime.Items.Add(2);改成:
MyInvoke mi=new MyInvoke(UpdateUI);
this.BeginInvoke(mi,new object[]{ "2 "});