在C#中跨线程修改UI,会出现异常,可以用代理的方式解决:
1.定义一个代理SetButton
2.定义操作函数addWindFarmId
3.在需要的地方高用addWindFarmId
如果只是要在checkBox中添加一行不受跨线程调用限制。
只是要在UI中添加Button一类的操作才会受影响。
public delegate void SetButton(Control tb, string str);
private void addWindFarmId(Control tb, string str)
{
if (tb.InvokeRequired)//判断是不是跨线程 true是 false不是
{
SetButton SetButton = new SetButton(addWindFarmId);//实例化委托对象
Invoke(SetButton, new object[] { tb, str });//线程传递
}
else
{
RadioButton rb = new RadioButton();
rb.Text = str;
rb.Left = groupBox1.Left + 20;
rb.Top = groupBox1.Top + 20;
groupBox1.Controls.Add(rb);
}
}