出面这种错误主要是因为我们在一个不是创建此控件的线程上,对此控件进行操作所引起的,现在有解决方法两种,大家自已看,
第一:
private delegate void change(string text); //定义委托,使线程方便调用此委托方
private void changeText()
{
setText("正在侦听");
}
private void setText(string text)
{
if (label1.InvokeRequired) //如果控件的 Handle 是在与调用线程不同的线程上创建的(说明您必须通过 Invoke 方法对控件进行调用),则为 true;否则为 false。(即创建此控件和操作此操件是否不在一个线程上)
{
change chg = new change(setText);
this.Invoke(chg, new object[] { text }); //在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托
}
else
{
label1.Text = text;
}
}
然后再新建一个线程
Thread cha = new Thread(new ThreadStart(changeText));
cha.Start();
第二种
private void change()
{
this.label1.Text = "正在侦听";
}
private void threadchange() //通过委托处理,MSDN上又很详细用法的说明
{
MethodInvoker In = new MethodInvoker(change);
this.BeginInvoke(In);
}
创建新线程
Thread cha = new Thread(new ThreadStart(threadchange));
cha.Start();
//其实这种方法原理是一样的,都是重新定义一个委托,然后在定义一个新线程对些委托方法进行调用,我做时把这个线程也放到了另一个线程内.