当出现此问题时一般是从另一个线程来访问控件,现在是不能跨线程来访问控件的。
解决:
1.在Form中加一句话即可解决
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
其中,CheckForIllegalCrossThreadCalls若捕获了对错误线程的调用,则为 true;否则为 false
程序初始化时设置这个属性,系统将不会再抛出你线程的异常信息。
2.使用Invoke解决
private void button1_Click(object sender, EventArgs e)
{
new Action(method).BeginInvoke(null, null);
}
void method()
{
while (true)
{
Thread.Sleep(2000);
Action ac = new Action(methodText);
this.Invoke(ac);
}
}
void methodText()
{
TextBox1.AppendText("实现\n");
}
其中所有有method的是要写的方法,把自己要实现的部分写在相应的地方即可
一般情况我个人觉得使用第一种方法就行,如果需要严谨一些或者工程项目中要使用,推荐第二种,可在自己能力的情况下进行适当的优化